Çoğu geliştiricinin sözleşmeleri web hizmetleriyle nasıl tasarladığını görmek için merak ediyorum. Servis mimarisine ve özellikle WCF'ye yeni hizmet vermek için oldukça yeniyim.Web Service Contract Design - Tek Sorumluluk
Kısacası, operasyonlarınızda ne tür nesneler döndüğünüzü öğrenmek isterim ve hizmetinizdeki her işlem aynı nesneyi döndürür mü?
Örneğin aşağıdaki düşünün: Şu anda, benzer bir ServiceBase nesneden devralır oluşturmak Bütün hizmetler: Dolayısıyla
public interface IAppResponse<TDto>
where TDto : IDto
{
List<TDto>
Data { get; }
ValidationResults ValidationResults { get; }
RequestStatus Status { get; }
}
:
public abstract class AppServiceBase<TDto>
: DisposableObjectBase where TDto : IDto
{
protected IAppRequest Request { get; set; }
protected IAppResponse<TDto>
Response { get; set; }
}
Response
gibi bir şey oluşturur dönüş nesneyi temsil türetilen herhangi bir hizmet, aynı nesneden oluşan bir yanıtı döndürür. Şimdi başlangıçta, her hizmetin tek bir nesneden sorumlu olmasını zorladığından iyi bir tasarım olacağını hissettim. Çoğunlukla bu işe yaradı, ancak hizmetlerim büyüdükçe, kendimi bu tasarımı sorgularken buldum.
Örnegin: Yazdiginiz müzik hizmetiniz var ve hizmetlerinizden biri "Albümler" olur. Böylece temel CRUD işlemleri yazıyorsunuz ve hemen hemen hepsi bir AlbumDto koleksiyonuna geri dönüyorlar.
Ne tür albüm türlerini döndüren bir işlem yazmak isterseniz. (LP, Tek, EP, vb) Yani bir nesneye sahipsin AlbumTypesDto. Bu nesne için yeni bir hizmet oluşturursunuz veya Albümler hizmetinizin birçok farklı nesne döndürmesini ister misiniz?
Çeşitli değişken dönüş türleriyle karmaşık ve kötü tasarımlı karmaşık bir hizmet hayal edebiliyorum, ancak belki de sadece bir veya iki servis işlem yönteminin aşırı olması için yepyeni bir hizmet yazıyor.
Ne düşünüyorsunuz?
Cevabınız için teşekkürler Slappy. Geçtiğimiz yıl için DDD ile çalışıyorum ama şimdiye kadar bir hizmet katmanına ihtiyaç duymadım. Lütfen ne demek istediğini açıklığa kavuşturabilir misiniz: "Bunun riski, işinizin mantığının hizmetinizi tüketen her şeyden kaynaklanacak olmasıdır." Yanıtınıza bağlı olarak, sözleşme işlemlerimi tek bir yanıt türüyle sınırlamamalıyım, yalnızca sorunla ilgili nesneleri döndürmelerini sağlamalıyım. DDD ve servis katmanı tasarımını okumaya devam edeceğim. – Daniel
İş mantığı CRUD rutinlerini tüketir. WEB servisinizde CRUD uygulamasının yapılması, tüketicinizin (bu durumda gümüş aydınlatma uygulaması) iş mantığına ev sahipliği yapacağı anlamına gelecektir.Aklıma göre iş mantığını web servislerinde kapsülleyeceğim, bu yüzden Silverlight uygulamanızın sadece sunumla ilgilenmesi gerekiyor. – Slappy