У меня есть некоторые общие вопросы о дизайне фреймворка.
Я создаю API для приложения iPhone в С#.NET(фреймворк 3.5) и SQL 2008 (используя LINQ). Я следил за шаблоном управления доменом (в книге) и имеют следующую структуру папок:
Core
- DataAccess
--Impl
-Domain
-Impl
Core - это моя основная библиотека API - мои DLL. DataAccess содержит интерфейсы доступа к данным DataAccess.Impl содержит репозитории (LINQ для БД) Домен содержит большинство моих типов данных и свойств. Impl содержит мои услуги (например AccountService.cs, EmailService.cs)
Теперь, в качестве упражнения, я добавил службу Windows в этот проект и я пытаюсь вызвать функциональность из DLL в этой службе. МОЙ ВОПРОС: какой слой я должен показывать другим приложениям? и что должно оставаться скрытым?
- Должны ли классы обслуживания из папки Impl быть видными программистами?
- Или репозитории из DataAccess.Impl?
- Или, должен ли я просто заложить все это для программистов? Как выглядит теперь это кажется путаным.
Когда я начал читать о DDD, я предполагал, что репозитории будут скрытых и доступных классам обслуживания, но я нахожу, что мне нужно позвонить функциональность как у моего клиента. Я сделал это неправильно?
Мой другой вопрос связан с именами имен пространства имен. Когда служба Windows звонит функциональность из моей основной библиотеки, я должен делать свои предложения как таковые:
using Company.Product.ProductCore.Core.DataAccess.Impl
using Company.Product.ProductCore.Core.Domain
using Company.Product.ProductCore.Core.Impl
Это кажется многословным. Глядя на библиотеки DLL Microsoft, они, похоже, придерживаются двухуровневой соглашение - (System.Linq, System.Text и т.д.). Имея Company.Product.ProductCore.Core.Impl кажется беспорядочным и на самом деле не говорит программисту, что делает это пространство имен (но это это то, что было предложено на примере, который я читал). Здесь есть лучшая практика?
Ваши предложения (и любые примеры) серьезно оценены.
Спасибо.