Bir web uygulamam var. Teknolojinin önemli olduğuna inanmıyorum. Yapı, soldaki resimde gösterilen N-katmanlı bir uygulamadır. 3 katman var.
UI (MVC modeli), İş Mantığı Katmanı (BLL) ve Veri Erişim Katmanı (DAL)
Sahip olduğum sorun BLL'imdeki uygulama olayları çağrısında mantığı ve yolları olduğu için büyük.
Uygulamadan geçen tipik bir akış şu olabilir:
Kullanıcı arabiriminde başlatılan olay, BLL'deki bir yönteme göre hareket eder, mantık gerçekleştirir (muhtemelen BLL'nin birden çok yerinde), sonunda DAL'ye, BLL'ye geri dönün (büyük olasılıkla daha fazla mantık) ve ardından UI'ya bir değer döndürür.
Bu örnekteki BLL çok meşgul ve bunun nasıl bölüneceğini düşünüyorum. Ayrıca sevmediğim bir mantık ve nesneler var.
Sağdaki sürüm benim çabam.
Mantık hala uygulamanın UI ve DAL arasında nasıl aktığını gösterir, ancak büyük olasılıkla hiçbir özelliği yoktur ... Yalnızca yöntemler (bu katmandaki sınıfların çoğu, herhangi bir durumu saklamadıkları için muhtemelen statik olabilir ). Poco katmanı, özellikleri olan sınıfların bulunduğu yerdir (örneğin ad, yaş, boy vb. Olan bir Person sınıfı gibi). Bunların uygulamanın akışı ile ilgisi yoktur, sadece depolarlar.
Akış olabilir:
Hatta UI'den tetiklenir ve bazı verileri UI katman denetleyicisine (MVC) iletir. Bu ham verileri çevirir ve poco modeline dönüştürür. Poco modeli daha sonra Mantıksal katmana (BLL idi) ve sonunda potansiyel olarak yol üzerinde manipüle edilen komut sorgu katmanına geçirilir. Komut sorgu katmanı, POCO'yu bir veritabanı nesnesine dönüştürür (bu neredeyse aynı şeydir, ancak biri kalıcı olmak için, diğeri ön uç için tasarlanmıştır). Öğe depolanır ve bir veritabanı nesnesi Komut Sorgu katmanına döndürülür. Daha sonra bir POCO'ya dönüştürülür, burada Mantık katmanına geri döner, potansiyel olarak daha fazla işlenir ve daha sonra UI'ye geri döner
Paylaşılan mantık ve arayüzler, MaxNumberOf_X ve TotalAllowed_X ve tüm arayüzler gibi kalıcı verilere sahip olabileceğimiz yerdir.
Hem paylaşılan mantık / arayüzler hem de DAL, mimarinin "tabanı" dır. Bunlar dış dünya hakkında hiçbir şey bilmiyor.
Her şey paylaşılan mantık / arayüzler ve DAL dışındaki poco'yu bilir.
Akış, ilk örneğe hala çok benzer, ancak her bir katmanı 1 şeyden daha fazla sorumlu kılıyor (durum, akış veya başka bir şey olabilir) ... ama bu yaklaşımla OOP'u kıracağım mı?
Mantık ve Poco'yu tanıtmak için bir örnek olabilir:
public class LogicClass
{
private ICommandQueryObject cmdQuery;
public PocoA Method1(PocoB pocoB)
{
return cmdQuery.Save(pocoB);
}
/*This has no state objects, only ways to communicate with other
layers such as the cmdQuery. Everything else is just function
calls to allow flow via the program */
public PocoA Method2(PocoB pocoB)
{
pocoB.UpdateState("world");
return Method1(pocoB);
}
}
public struct PocoX
{
public string DataA {get;set;}
public int DataB {get;set;}
public int DataC {get;set;}
/*This simply returns something that is part of this class.
Everything is self-contained to this class. It doesn't call
trying to directly communicate with databases etc*/
public int GetValue()
{
return DataB * DataC;
}
/*This simply sets something that is part of this class.
Everything is self-contained to this class.
It doesn't call trying to directly communicate with databases etc*/
public void UpdateState(string input)
{
DataA += input;
}
}