Интересно, что ты имеешь ввиду. Если синтаксис, то достаточно и месяца, а если грамотно использовать контравариантность всякую, то соглашусь.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class CustomerAccount { private ISpecification<CustomerAccount> _hasReachedRentalThreshold; private ISpecification<CustomerAccount> _customerAccountIsActive; private ISpecification<CustomerAccount> _customerAccountHasLateFees; public CustomerAccount() { _hasReachedRentalThreshold = new HasReachedRentalThresholdSpecification(); _customerAccountIsActive = new CustomerAccountStillActiveSpecification(); _customerAccountHasLateFees = new CustomerAccountHasLateFeesSpecification(); } public decimal NumberOfRentalsThisMonth { get; set; } public bool AccountActive { get; set; } public decimal LateFees { get; set; } public bool CanRent() { ISpecification<CustomerAccount> canRent = _customerAccountIsActive.And(_hasReachedRentalThreshold.Not()).And(_customerAccountHasLateFees.Not()); return canRent.IsSatisfiedBy(this); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class HasReachedRentalThresholdSpecification : CompositeSpecification<CustomerAccount> { public override bool IsSatisfiedBy(CustomerAccount candidate) { return candidate.NumberOfRentalsThisMonth >= 5; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class CustomerAccountStillActiveSpecification : CompositeSpecification<CustomerAccount> { public override bool IsSatisfiedBy(CustomerAccount candidate) { return candidate.AccountActive; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class CustomerAccountHasLateFeesSpecification : CompositeSpecification<CustomerAccount> { public override bool IsSatisfiedBy(CustomerAccount candidate) { return candidate.LateFees > 0; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public abstract class CompositeSpecification<T> : ISpecification<T> { public abstract bool IsSatisfiedBy(T candidate); public ISpecification<T> And(ISpecification<T> other) { return new AndSpecification<T>(this, other); } public ISpecification<T> Not() { return new NotSpecification<T>(this); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public interface ISpecification<T> { bool IsSatisfiedBy(T candidate); ISpecification<T> And(ISpecification<T> other); ISpecification<T> Not(); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class AndSpecification<T> : CompositeSpecification<T> { private ISpecification<T> _leftSpecification; private ISpecification<T> _rightSpecification; public AndSpecification(ISpecification<T> leftSpecification, ISpecification<T> rightSpecification) { _leftSpecification = leftSpecification; _rightSpecification = rightSpecification; } public override bool IsSatisfiedBy(T candidate) { return _leftSpecification.IsSatisfiedBy(candidate) && _rightSpecification.IsSatisfiedBy(candidate); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ASPPatterns.Chap5.Specification.Model { public class NotSpecification<T> : CompositeSpecification<T> { private ISpecification<T> _innerSpecification; public NotSpecification(ISpecification<T> innerSpecification) { _innerSpecification = innerSpecification; } public override bool IsSatisfiedBy(T candidate) { return !_innerSpecification.IsSatisfiedBy(candidate); } } }
Забей. Я вообще не про то. Смотри на пример из книжки.
Не, ну я так прикинул, что дофига гемора нужно, чтобы протестировать какой-нибудь метод в котором внутри есть, что-то типа !(a == !b) && !(a != b), где а и b, что-то тоже большое. Можно сразу тестировать логическое выражение.
Паттерны: Composite, Specification. Ну это типа логика делегируется отдельным классам, которые проверяют логическое утверждение на основе чего-то. Из этих классов собирается аггрегат, используя кастомные логические Not, Or, And. Таким образом гораздо легче логику тестировать. Я хоть и не тестировал никогда, но по такому принципу писал. Ну ты понял короче?
надо тесты писать.вокруг композитных спецификаций аггрегатов многократно используемой логики.
Что творится в донецке и харькове?
pbs.twimg.com/...Aa-cT.jpg:large
pbs.twimg.com/...AhZXW.jpg:large
Евреи же ... Это они во всем виноваты ... Их даже пули не берут
Со всем согласен. Я только хотел сказать, что браузеры очень уж разные www.sitepen.com/...ce-an-analysis . Лично я на текущий момент разбирался только с сорцами лисы.
Вполне допускаю, что ие сможет разорвать другие браузеры по каким-то операциям со строками. Тоже может случится и с лисой. Больно яваскрипты эти разные.
что я сделал не так?сделай в ие и в лисе
Ниочем. Я щас на сишке влеплю красавца. Не побьете.
Ну теперь можно и Скинина трольнуть с чистой совестью? ))
Пофиг. Нужен кто-то чтобы
в случае чего защитить митинг от набегов орков
Тю блин, вы по ссылке переходили? Там же вроде добровольцы-патриоты. Ну они себя позиционируют так во всяком случае. Никто не заставляет их здания идти освобождать. Просто в случае чего защитить митинг от набегов орков.
Понимаешь, люди у которых блестят глаза и имеют желание учиться срать хотели на такие вещи как нокаутджиэс, бэкбонджиэс и остальное. Прикручивание этих вещей к проекту — это не развитие ниху.я ни разу. Люди умеющие учится способны самостоятельно выучить обычный яваскрипт и накидать инфраструктуру для клиентского MVVM за неделю + написать конвеншены для разработки клиента.
Но лучше таких отсеять и взять чела с блеском в глазах, любящего учиться и узнавать новое.и уеб.ать версткой и бакфиксингом по этому блеску в глазах и отбить все желание учиться.
Я не гуглил, а что они уже отличились как-то?
Ему здесь точно понравится. Они еще месяц после окончания евро здесь бухали и не хотели уезжать. Говорили, что это лучшая страна на свете (здесь пивасик копеечный). Так что Добро Пожаловать. И следует отметить, что оне не неадекватили, когда мы их дернули 2:1, в отличии от русских.
Мне вот интересно, если из C# выкинуть соснули.рф, то пулучается какбы джава. Но я так смотрю, там вообще ничего не остается. Тупо голяк. Даже выучить нечего.