Bu etki alanı güdümlü bir tasarım RESTful web hizmeti için iyi bir Visual Studio çözüm yapısı mı?


15

Bir .NET 4.5 C # Web API RESTful çözümü oluşturuyorum ve birisinin bana proje çözümümün Domain Driven Design kullanılarak tasarlanmış bir çözüm için doğru ve / veya akıllı (-enough?) Olup olmadığını söylemesini istiyorum.

Çözüm 6 projeye ayrıldı:

  • / Taban

(Hiçbir şey tarafından referans verilmemiştir)

Web projesi ve çözüm ile dış dünya arasındaki arayüzü oluşturur. Web API denetleyicilerini içerir. İstek nesnelerinden değer toplamanın ve BizApi katmanından iş istemenin ötesinde neredeyse hiç mantık içermez.

  • /Biz.Api

(Baz tarafından referanslandırılmıştır])

Etki alanı hizmetlerini sağlar ve / Base arabirimi projesinin /Biz.Domain projesindeki etki alanı iş mantığı nesnelerine erişmesine izin verir.

  • /Biz.Domain

(Referans: Biz.Api)

Biz.Api katmanı için etki alanı sınıflarını sağlar. Bunlar, işin bellekteki verilerini işlemek için yöntemler sağlar.

  • /Dal.Db

(Referans: Biz.Api)

Veritabanı veri havuzu katmanı. Veritabanlarına erişir ve döndürülen verileri / Interfaces katmanında tanımlanan dahili DTO'lara eşler.

  • /Dal.Services

(Referans: Biz.Api)

Web hizmetleri gibi harici bağımlılıklara bir proxy katmanı sağlar ve döndürülen verilerini / Interfaces projesinde tanımlanan dahili DTO'larla eşler.

  • / Bağlantı

(Yukarıdaki çoğu proje tarafından başvurulmuştur)

IoC gibi şeyler için sözleşmeleri tanımlamak amacıyla çözüm ve C # arayüzlerine veri aktarımı için DTO sınıflarını içerir.


"/Biz.Api Etki alanı hizmetleri sağlar": Uygulama Hizmetlerini mi kastediyorsunuz? Ayrıca, Depolar genellikle DTO'ları değil varlıkları (toplam kökler) döndürür. Ve bu projeler arasındaki bağımlılıkları da bilmek iyi olurdu;)
guillaume31

Evet, yani Uygulama Hizmetleri. Depolar, verileri depolamaktan başka bir şey yapmayan sınıf örnekleri döndürüyor - bu veriler, bu durumda AutoMapper kullanılarak örneğe eşlenir. Döndürülen örnekte, Varlıkların sahip olduğu toplama yöntemleri yoktur.
Matt W

"bu veriler eşlenir": ne ile ne arasında? "Yöntemleri manipüle etme" ile ne demek istiyorsun?
guillaume31

Yanıtlar:


22

Bu klasör yapısı, Vaugh Vernon'un ünlü Uygulama alan adı tasarım kitaplarından esinlenmiştir .

Çözüm:
├ WebService (REST Hizmetleri burada bulunur)
├ WebServiceTest'ler
├ Uygulama (Uygulama hizmetleri burada bulunur)
├ ApplicationTests
├ Etki Alanı (Varlıklar, VO, Etki alanı hizmetleri, etki alanı fabrikaları, özellikler, etki alanı olayları, Depo arabirimleri, altyapı hizmetleri arabirimleri)
├ Etki Alanı Testleri
├ Altyapı (Depolar, Altyapı hizmetleri dahil, Dış hizmetlere bağdaştırıcılar)
└ Altyapı Testleri

Bir Çözüm ile başlıyorum, daha sonra uygulamamdaki her katman için dört proje, ardından her katman testi için başka bir dört proje oluşturuyorum.

Klasör interfacesveya servicesetki alanı katmanınızda klasör oluşturmayın, bunun yerine ilgili sınıflar modüllerdeki işlevlere göre gruplandırılmalıdır.


1

Yapıya gelince, benim için sorun "YourProjectWebApi"değil "Base", "Dal.External"bunun yerine , yerine, "Dal.Services"vs. gibi farklı, daha açıklayıcı isimler bulmuş olsam da .

Varlıkları depolardan çıkarmanız ve etki alanı (iş) eylemlerini doğrudan bunlardan alabilmeniz gerektiğinden, "dahili DTO" bölümünde bir koku olabilir. Varlıklar sadece DTO'lar değildir.

Etki alanı katmanının DTO'lar Arayüzler projesinden (Depolar tarafından döndürülen?) Ve kendi Etki Alanı nesneleri arasında bazı eşleme yapmasına Dal.Dbbağımlı olmayan bir şekilde bir araya geldim Biz.Domain,. Bu, tipik bir teknoloji harikası (== "soğan" veya "altıgen") DDD mimarisinde doğru olmaz - Alan katmanı diğer projelere referans vermemelidir. Aynı nedenden ötürü, Depo arayüzleri Etki Alanında beyan edilmeli, Interfacestahmin ettiğim gibi olmamalıdır .

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.