Передмова
Сподіваюся , це очевидно, але ... в пропонованих просторів імен нижче, ви б замінити MyCompany
і MyProject
з реальними іменами вашої компанії і проекту.
DTO
Я рекомендую використовувати однакові класи DTO на всіх шарах. Так мало пунктів обслуговування. Я зазвичай розміщую їх під MyCompany.MyProject.Models
простором імен, у власному однойменному проекті VS. І зазвичай я називаю їх просто за реальною сутністю, яку вони представляють. (В ідеалі таблиці таблиць баз даних також використовують однакові імена, але іноді має сенс налаштувати схему дещо інакше.)
Приклади: Person
, Address
,Product
Залежності: Немає (крім стандартних .NET або бібліотек помічників)
DAL
Мої особисті переваги тут - використовувати набір класів DAL один за одним, що відповідає класам DTO, але у MyCompany.MyProject.DataAccess
просторі імен / проект. Імена класів тут закінчуються Engine
суфіксом, щоб уникнути конфліктів. (Якщо цей термін вам не подобається, то і DataAccess
суфікс також буде добре працювати. Просто будьте узгоджені з тим, що ви вибрали.) Кожен клас надає прості параметри CRUD, що впливають на базу даних, використовуючи класи DTO для більшості вхідних параметрів та типів повернення (всередині загальний, List
коли існує більше одного, наприклад, повернення від Find()
методу).
Приклади: PersonEngine
, AddressEngine
,ProductEngine
Залежності: MyCompany.MyProject.Models
BAL / BLL
Також тут відображається індивідуальне відображення, але в MyCompany.MyProject.Logic
просторі імен / проекту та з класами, що отримують Logic
суфікс. Це повинен бути єдиний шар, який викликає DAL! Заняття тут часто є простим переходом до DAL, але якщо & коли потрібно застосовувати правила бізнесу, це місце для цього.
Приклади: PersonLogic
, AddressLogic
,ProductLogic
Залежності: MyCompany.MyProject.Models
,MyCompany.MyProject.DataAccess
API
Якщо є рівень API веб-служб, я використовую той самий підхід «один за одним», але в MyCompany.MyProject.WebApi
просторі імен / проекту, з Services
суфіксом класу. (Якщо ви не використовуєте веб-API ASP.NET, в цьому випадку ви, звичайно, Controller
замість цього використовуєте суфікс).
Приклади: PersonServices
, AddressServices
,ProductServices
Залежності: MyCompany.MyProject.Models
, MyCompany.MyProject.Logic
(ніколи не перепускний це, викликаючи DAL безпосередньо!)
Спостереження за бізнес-логікою
Здається, все частіше люди залишають BAL / BLL і замість цього застосовують бізнес-логіку в одному або декількох інших шарах, де це має найбільш сенс. Якщо ви це зробите, будьте абсолютно впевнені, що (1) весь код програми проходить через рівень (и) з діловою логікою, і (2) це очевидно і / або добре задокументовано, де було реалізовано кожне конкретне ділове правило. Якщо ви сумніваєтеся, не намагайтеся цього вдома.
Заключна примітка про архітектуру рівня підприємства
Якщо ви перебуваєте у великій компанії чи в іншій ситуації, коли одні й ті ж таблиці баз даних діляться у кількох програмах, я рекомендую не залишати MyProject
частину вищевказаних просторів / проектів. Таким чином ці шари можуть бути спільними для декількох прикладних додатків (а також закулісних утиліт, таких як Windows Services). Але робіть це лише в тому випадку, якщо у вас є міцна взаємодія в команді та ретельне автоматизоване тестування регресу на місці !!! В іншому випадку зміна однією командою спільного основного компонента, ймовірно, порушить програму іншої команди.