Bir hizmet sınıfı ile bir yardımcı sınıf arasındaki fark [kapalı]


61

Bir Servis sınıfını bir yardımcı sınıftan veya yardımcı bir sınıftan neyin ayırdığını bilmek ister misiniz? Sadece altta yatan yöntemleri olan bir sınıf dao'nun bir hizmet olduğunu mu söylüyor? Yardımcı sınıfların kullanımı SRP'yi ihlal etmiyor mu?

Yanıtlar:


74

Ç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 TicketingServicearayüz sizi izin verebilir buyTicket, sellTicketbö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 DateConvertorbir convertDateToTimestampyö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.


25

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.


15

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

  • Hesap, Hesap Fabrikası, Hesap Deposu, vb
  • Müşteri, Müşteri Fabrikası, Müşteri Deposu, vb

Herhangi bir özelliğe ait olmayan bir işlevselliğe sahipseniz, oturması için doğru bir yer bulmak zor olabilir. Yani, hem AccountAND hem de içeren bir süreci içeren bir şey Customer.

Böylece, servicegirildiğ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.

helperBir 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 helperbiraz belirsiz buluyorum ve gerçekten benim modelimde yok. Kullandığım kütüphanelerde var olmalarına rağmen.


1
Eric Evan'ın yukarıda belirtilen tanımı özellikle bir Etki Alanı Hizmeti içindir. DDD'nin etki alanı hizmetleri, uygulama hizmetleri, altyapı hizmetleri ve hatta veri erişim hizmetleri olarak görülen depoları vardır.
Songo

12

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.


5

İ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.


4

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.