Yanıtlar:
Çizgiler biraz bulanık olabilir, ama şöyle görüyorum:
Bir Servis sınıfı / arayüzü, bir müşterinin uygulamadaki bazı fonksiyonlarla etkileşime girmesini sağlar. Bu, bazı ticari anlamlara sahip, genellikle halka açıktır. Örneğin, bir TicketingService
arayüz sizi izin verebilir buyTicket
, sellTicket
böylece ve.
Bir yardımcı sınıf, istemciden gizlenme eğilimindedir ve dahili olarak, işletme alanı anlamı olmayan bazı kazan plakası çalışması sağlamak için kullanılır. Örneğin, belirli bir veri deposuna kaydetmek için bir tarihi zaman damgasına dönüştürmek istediğinizi varsayalım. Bu işlemi gerçekleştiren DateConvertor
bir convertDateToTimestamp
yöntemle adlandırılmış bir yardımcı program sınıfınız olabilir .
Servisler sadece DAO'lara sıkı sıkıya bağlı değildir, kalıcılıktan daha geniş bir terim / kullanım şeklidir.
Yardımcı sınıflar, bu ilkeye göre kodlanmışsa SRP'yi ihlal etmez. Diğer bir deyişle, her yöntem bir şeyi ve bir şeyi iyi yapmalı, sınıf bir tür yardımcı program yardımı yapmalıdır (örneğin Tarih dönüştürme) ve bunu iyi yapmalıdır.
Bilimsel bir tanım değil, fakat benim genel anlayışım hizmet sınıfının uygulama içinde bazı bağlamları vardır; oysa yardımcılar daha geneldir ve hangi uygulamaya yardım ettiklerini umursamıyor.
Benim için, bunun gibi bir şey olan Eric Evans tanımına göreservice
gidiyorum :
Genel olarak, iyi tasarlanmış bir sistemde, çoğu sınıf (Etki Alanı Modelinde), modeldeki belirli bir varlık veya varlık grubu ile ilgilenmeleri konusunda oldukça açık bir sorumluluk veya işleve sahiptir.
yani
Herhangi bir özelliğe ait olmayan bir işlevselliğe sahipseniz, oturması için doğru bir yer bulmak zor olabilir. Yani, hem Account
AND hem de içeren bir süreci içeren bir şey Customer
.
Böylece, service
girildiği yer burasıdır. Etki Alanı Modeli'nde bulunan ancak doğal olarak bir varlığa / bileşene veya başka birine ait olmayan kodu koyduğunuz yer.
helper
Bir tür strateji sınıfı olarak düşünüyorum . Bana göre, çeşitli sınıflar tarafından yeniden kullanılması gereken, ancak onu kullanan sınıfların hiyerarşisi içinde soyut yöntemler olarak iyi oturmayabilecek kod koymak için bir yer. Şahsen ben terimini helper
biraz belirsiz buluyorum ve gerçekten benim modelimde yok. Kullandığım kütüphanelerde var olmalarına rağmen.
Hizmet Sınıfı: İş mantığını içerir.
Yardımcı Sınıf: bu sınıf bir tür yeniden kullanılabilir bileşendir.
İlgili olmayan iki müdürü karıştırdın. Servisler ve Yardımcı Sınıflar bağlı değil. Özellikle "Hizmet Sınıfı" terimi yanıltıcıdır - Bence sınıflardan daha yüksek bir soyutlama düzeyinde olan "Hizmet" e atıfta bulunuyorsunuz. Bir servis ile karakterize edilir
"Bir veya daha fazla özelliğe erişimi mümkün kılan, erişimin öngörülen bir arayüz kullanılarak sağlandığı ve hizmet tanımında belirtilen kısıtlama ve politikalarla tutarlı bir şekilde kullanıldığı bir mekanizma."
Bu tanım, içeriğinize bağlı olarak biraz değişir. Bununla birlikte, kritik nokta "hizmet" teriminin soyut bir düzeyde , mimarlık ve alan bilgisi düzeyinde olmasıdır . "Yardımcı sınıfı" bir tasarım deseni jenerik operasyonlarını saklanması bir sınıf atıfta (bunlar blob'un en ya tanrı sınıfları için gelişmeye eğilimindedir gibi bir anti-pattern olsa bile) (bu açık olduğunu fark olduğunu soyutlama alt seviyeye ve bağlı olduğu için uygulama / çözelti bilgisi ). Herhangi bir yardımcı sınıf içermeyen herhangi bir yazılım bulunmadığının farkındayım, ancak yine de kötü bir uygulama.
Dikkat edilmesi gereken noktalardan biri de DDD'deki “hizmet” in çoklu tanımları:
Uygulama servisi: Bunlar uygulama katmanında yer alır ve etki alanı ve veri katmanıyla iletişim kurar, bunlar harici sistemler / kullanıcı arayüzünün DDD sistemiyle etkileşime girdiği arayüzdür.
Etki Alanı Hizmeti: Bu etki alanı veya uygulama katmanı tarafından kullanılabilir ve belirli bir varlığa tam olarak uymayan iş mantığı içerir.
Altyapı Hizmeti: Bunlar, dış kaynaklar ile iletişim kurmak için etki alanı tarafından kullanılır.
Yardımcı sınıflar, birden fazla varlık tarafından yeniden kullanılacak kod parçalarını veya algoritmaları içerme eğilimindedir, dolayısıyla DRY ilkesini ihlal etmeden varlıklara giremezler. Muhtemelen Etki Alanı Hizmetlerine en yakın olanlardır, çünkü aynı amacı yerine getirirler (iş mantığını varlıklardan dışsallaştırarak) ancak farklı nedenlerle yaparlar.