Saya punya aplikasi web. Saya tidak percaya teknologi itu penting. Strukturnya adalah aplikasi tingkat-N, ditunjukkan pada gambar di sebelah kiri. Ada 3 lapisan.
UI (pola MVC), Lapisan Logika Bisnis (BLL) dan Lapisan Akses Data (DAL)
Masalah yang saya miliki adalah BLL saya sangat besar karena memiliki logika dan jalur melalui panggilan peristiwa aplikasi.
Aliran khas melalui aplikasi dapat:
Acara dipecat di UI, melintasi metode di BLL, melakukan logika (mungkin di beberapa bagian BLL), akhirnya ke DAL, kembali ke BLL (di mana kemungkinan lebih banyak logika) dan kemudian mengembalikan beberapa nilai ke UI.
BLL dalam contoh ini sangat sibuk dan saya berpikir bagaimana membagi ini. Saya juga memiliki logika dan objek yang digabungkan yang tidak saya sukai.
Versi di sebelah kanan adalah usaha saya.
Logika ini masih bagaimana aplikasi mengalir antara UI dan DAL, tetapi ada kemungkinan ada sifat ... Hanya metode (mayoritas kelas dalam lapisan ini bisa mungkin statis karena mereka tidak menyimpan setiap negara). Lapisan Poco adalah tempat kelas yang memiliki properti (seperti kelas Orang di mana akan ada nama, usia, tinggi dll). Ini tidak ada hubungannya dengan aliran aplikasi, mereka hanya menyimpan keadaan.
Alurnya bisa:
Bahkan dipicu dari UI dan melewatkan beberapa data ke UI layer controller (MVC). Ini menerjemahkan data mentah dan mengubahnya menjadi model poco. Model poco kemudian diteruskan ke lapisan Logic (yang merupakan BLL) dan akhirnya ke lapisan permintaan perintah, berpotensi dimanipulasi di jalan. Lapisan query perintah mengkonversi POCO ke objek database (yang hampir sama, tetapi satu dirancang untuk kegigihan, yang lain untuk ujung depan). Item disimpan dan objek database dikembalikan ke lapisan Command Query. Ini kemudian dikonversi menjadi POCO, di mana ia kembali ke lapisan Logic, berpotensi diproses lebih lanjut dan akhirnya, kembali ke UI
Logika dan antarmuka bersama adalah tempat kami mungkin memiliki data persisten, seperti MaxNumberOf_X dan TotalAllowed_X dan semua antarmuka.
Baik logika / antarmuka bersama dan DAL adalah "basis" dari arsitektur. Ini tidak tahu apa-apa tentang dunia luar.
Semuanya tahu tentang poco selain logika / antarmuka bersama dan DAL.
Alurnya masih sangat mirip dengan contoh pertama, tetapi itu membuat setiap lapisan lebih bertanggung jawab untuk 1 hal (baik itu keadaan, aliran atau apa pun) ... tetapi apakah saya melanggar OOP dengan pendekatan ini?
Contoh untuk memperagakan Logika dan Poco dapat berupa:
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;
}
}