2016-04-09 11 views
0

Soğan çerçevesinde, dış katman tüm iç katmanlara erişebilir. Bununla devam edersem, dış katmanım (MVC'deki UI katmanı/Denetleyici) doğrudan uygulama/iş hizmetlerine ve depolara da erişebilir. Şimdi, denetleyicim bir etki alanı modeli oluşturabilir ve veri deposunu kullanarak veri deposunda kaldırabilir. Ve böylece iş katmanında yazılan doğrulama ve diğer iş kurallarını atlayın. İnanıyorum ki, bir şey özlüyorum. Lütfen yardım et. Palermo kendisi twitter konuşmaları aksi belirtilmedikçe olmasına rağmen http://jeffreypalermo.com/blog/the-onion-architecture-part-2/Soğan Çerçevesi: UI/Kontrolörlerin doğrudan depoya erişmesi gerekiyorsa

cevap

1

den

public SpeakerController(IConferenceRepository conferenceRepository, 
         IUserSession userSession, IClock clock) 
    : base(userSession) { 
    _conferenceRepository = conferenceRepository; 
    _clock = clock; 
    _userSession = userSession; } 

Ben "hayır" demek. Her katmanın bir sonraki iç katmanla konuşmasına izin verdiğini ve bypass etmediğini söylüyorum. Bu kurala yaptığım istisna, söz konusu işlevsellik temel olarak referans veriler için sadece CRUD ise. Bu tür veriler için ek karmaşıklığı tanıtmak için bir neden göremiyorum. Başka bir alternatif, depo uygulamanızın iş kurallarının doğrulanmasını zorlamasını sağlamaktır. Uygulama, soğanın en dış tabakasında olduğundan, bunun yapılması oldukça kolay olmalıdır.

Alistair Cockburn's Hexagonal Architecture'u Onion Architecture'den daha kolay ve daha kolay buldum. Temelde "benim uygulamamın içinde" ve "benim uygulamamın dışında" var. Bu sınırı geçmeniz gerektiğinde, uygulamanızı uygulama ayrıntılarından korumak için bir adaptöre ihtiyacınız vardır.

+0

Seni doğru anladıysam, CRUD işlemi için iş sınıfında sarıcı/Geçiş yöntemlerine gerek olmadığını söylemek istersiniz. UI'de depo yöntemleri kullanmak tamamdır. Bana göre, 'iş kurallarının doğrulanması' depoda iyi bir fikir değildir. Bu, iş katmanına sahip olma amacını ortadan kaldıracaktır. – Pragmatic

+0

2 ayrı sorun var: başvuru verileri ve doğrulama. Bunları ayrı yorumlarda ele alacağım. Re: Referans Veriler Diyelim ki StateOrProvince adında bir tablom var. Bu veriler için gerekli alanlar ve teklikten başka iş kurallarına sahip olmamam olabilir. Bu kurallar veritabanı tarafından zorlanabilir. Bu veri için CRUD dışında bir işlem bulunmamaktadır. Bu tür veriler için bir Etki Alanı Modeli geliştirmek aşırı olabilir. Bu durumda genellikle görüşümü doğrudan ORM'ime bağlarım. –

+0

Re: Doğrulama Doğrulama mantığınızı etki alanı katmanınıza yazarsınız. Etki alanı katmanınızda tanımlanan kalıcılık katmanınızı temsil eden, alan adı nesnelerinizin kullanabileceği soyutlamalara sahip olmalısınız. Kalıcı katmanınızın uygulanmasında alan nesnesinin doğrulama mantığını "çağırmamanız" için bir neden yoktur. Aslında, OA şemasında dikkatlice bakarsanız, sürekliliğin uygulanması şemanın en dış basamaklarından biridir. Bu, kalıcılık katmanınızdaki Etki Alanı'nın tam bağlamını aldığınız anlamına gelir. Onu da kullanabilirsin. –

İlgili konular