BELİRTİME ardındaki ana fikir genellikle
ŞARTNAME kurulu bir biçimcilik bir uyarlamasıdır onunla mantıksal operatörleri kullanarak ima eden yüklem, olmasıdır (Eric Evans DDD, s. 274)
Örneğin kutunun kırmızı olduğunu söyleyebiliriz, yani bazı RedSpecification'ı karşılar. Bazı GreenSpecification ve hatta bir kompozit RedOrGreenSpecification bildirebiliriz. biz özellikleri için mantıksal işlemleri destekleyen bazı gelişmiş bir çerçeve varsa, bu
BoxSpecification redBoxSpec = BoxSpecification.forColor(BoxColor.RED);
BoxSpecification greenBoxSpec = BoxSpecification.forColor(BoxColor.GREEN);
BoxSpecification redOrGreenBoxSpec = redBoxSpec.or(greenBoxSpec);
gibi bir şey o zaman bazı deposundaki bütün kırmızı/yeşil kutuları sorgulamak için örneğin şartname kullanabilirsiniz olabilir:
Collection<Box> boxes = boxRepository.findAll(redOrGreenBoxSpec);
POLICY'e gelince - bu STRATEJİ modelinin bir çeşidi, ancak asıl amacı iş kurallarının kapsanması bazı bildirimsel formdur.
Teknik - (mavi kitabın ilk bölümünde gösterildiği şekliyle) sadece ayrı sınıf olabilir ilk aşamalarında, ancak daha sonra kolayca
uzatılabilir - bu STRATEJİSİ doğrudan uygulanması her zaman değil
Politikası bildiğimiz, genellikle burada gerekli değildir farklı kuralları, yerine ihtiyaç motive edilir STRATEJİSİ olarak bilinen tasarım modeli için başka adıdır. Ama biz yakalama çalışıyoruz konsept Ocak ayında sarı kutulara hediyeler paketi alan güdümlü tasarım
Örneğin içinde eşit derecede önemli bir motivasyon olan bir politikayı anlamını, uymayan ve kırmızı yok Şubat
public class Box{
public BoxColor getColor(){}
public void recolor(BoxColor color){}
}
public class BoxFactory{
public Box createDefaultBox(SomeDate date){
NewBoxPolicy boxPolicy = PolicyRegistry.getNewBoxPolicyForDate(date);
Box box = new Box();
boxPolicy.prepareBox(box);
return box;
}
}
public interface NewBoxPolicy{
void prepareBox(Box box);
}
public class FebruaryNewBoxPolicy implements NewBoxPolicy{
public void prepareBox(Box box) { box.recolor(BoxColor.RED}; }
}
public class JanuaryNewBoxPolicy implements NewBoxPolicy{
public void prepareBox(Box box) { box.recolor(BoxColor.YELLOW}; }
}
public class PolicyRegistry{
public static NewBoxPolicy getNewBoxPolicyForDate(SomeDate date){
switch (date.month()){
case SomeMonth.JANUARY: return JANUARY_NEW_BOX_POLICY;
case SomeMonth.FEBRUARY: return FEBRUARY_NEW_BOX_POLICY;
default: throw new AssertionError();
}
}
o ŞARTNAME sadece bir nesnenin özelliklerini (bu özelliklerin her ikisi tatmin edebilir veya iş gereksinimlerini karşılamak YAPMAYIN) açıklar ise, eylemleri içine alabilir POLİTİKASI anlamak önemlidir içinde kutuları. Bazı doğrulama politikaları, şartların yerine getirildiğini kontrol etmek için SPESİFİKASYONLARI kullanabilir.
Yani projede birçok farklı ŞARTNAME örneği bulunabilir ve bunlar bakış iş açıdan geçerli ve geçersiz nesneler hem açıklayabilirsiniz.Aslında, teknik özellikler hiç mantıklı olmayabilir: örneğin, bir ürün arama siteniz varsa, kullanıcı "XBOX" adlı bir ürünü aramak için bir istek belirtebilir, ancak "Sony" satıcı adıyla, yalnızca Belirli satıcılar belirli ürünleri üretebilir, modelinizde yakalanmaz.
POLİTİKASI önemli yönü onun niyet fiili iş kuralları kapsüllemenizi olmasıdır (böylece kod projenin farklı bölümlerini dağınık değildir), bu yüzden kurallar değiştiğinde kolayca karşılık gelen sınıf bulabilirsiniz. Bu nedenle, projenizde çok sayıda TEKNİK ÖZELLİK olabilir, ancak yönetilebilir bir sayıda POLİTİKA olabilir ve bu POLİTİKALAR bulmak ve değiştirmek kolay olmalıdır.
P.S. Lütfen bu gönderinin sadece bir örnek olduğunu ve aşırı mühendislik yapmak için bir lisans olmadığını unutmayın, tabi ki en basit tasarımı kullanmalısınız, bu bir sağduyu meselesi.
Örneklerde, özelliklerin ve ilkelerin özelliklerinin tanımlanmasıyla ilgili eylemlerin tanımlanmasıyla ilgili hedeflerin belirtildiğini söyleyebilirim. Ama kitaptan da okudum, ama gerçekten emin değilim. – SpaceTrucker