Я разрабатываю приложение, которое реализует многоуровневый шаблон, где MySQL используется для сохранения. Существует служба WCF, которая предоставляет доступ к данным и предоставляет DTO.Многоуровневая архитектура - Вопросы ответственности
Кроме того, я планирую реализовать следующие модели: - DTOS - MVP (пока не уверен, что если пассивный вид или контроль контроллер) - код на интерфейсах, где применимые
В настоящее время я rawly имеют следующий проект Структура:
+-------------------------------+
| MySQL DB Server |
+------+------------------------+
^
| Uses Entity Framework 5.0
|
+
+-------------------------------------------------------------------------------+
| Application Server |
|-------------------------------------------------------------------------------|
|+------------------+ +----------------+ +--------------+ +--------------------+|
|| Data Access Layer| | Contracts | | Communication| | Business Layer ||
||------------------| |----------------| |--------------| |--------------------||
|| - EF 5.0 Entities| | - WCF Contracts| | - WCF Service| | - Actual Service ||
|| | | | | Hosts | | - Session management|
|| | | | | | | - Security and ||
|+------------------+ +----------------+ +--------------+ +--------------------+|
+-------------------------------------------------------------------------------+
^
| Communicates via DTOs which are acutally wrappers for Entities
| eg. GetUserByID() or SaveUser(userDTO)
|
|
+-------+-----------------------------------------------------------------------+
| Clients |
|-------------------------------------------------------------------------------|
|+-------------------+ +-------------------+|
|| Business Layer |+----------------------------------->| GUI (Winforms) ||
||-------------------| BLL receives DTOs and creates |-------------------||
|| -Provide WCF Servi| Domain Objects (eg. User) which are| -Implementation of||
|| ce Access | Processed by presenters and passed | View Interfaces ||
|| -Service Reference| to views where they are bound to | ||
|| -Implementation of| controls. | ||
|| Presenter Interf.| | ||
|+-------------------+ +-------------------+|
+-------------------------------------------------------------------------------+
+------------------------------------------------------------------------+
| General |
|------------------------------------------------------------------------|
|+---------------------+ +--------------------+ +-----------------------+|
|| DTOs | | Interfaces | | Library ||
||---------------------| |--------------------| |-----------------------||
|| -DTO Definitions | | -View Interfaces | | -General Helper Classe||
|| | | -Presenter Interf. | | s eg. Cryptography ||
|| | | -Domain Model IF. | | ||
|+---------------------+ +--------------------+ +-----------------------+|
+------------------------------------------------------------------------+
Наружные коробки - это папки проектов в Visual Studio. Внутренние коробки: C# Проекты
Прежде чем продолжить кодирование и провести больше времени в реальной реализации, я просто хотел бы получить некоторые отзывы о структуре/архитектуре моего проекта.
Я оборачивать вокруг моей головы следующие вопросы:
- ли выше структура «лучшей практики» -conform? например. расположение интерфейсов, DTO
- Можно ли иметь два бизнес-уровня или, скорее, разделить бизнес-уровень на клиент и сервер? Сервер BLL предназначен для обеспечения общих функций, таких как управление сеансом и безопасность, в то время как клиент BLL предоставляет доступ к услугам. Он также управляет просмотрами его докладчиками.
- В настоящее время серверная часть не знает о доменных объектах. Было бы лучше, если бы они использовали здесь ? Это приведет отображение моих объектов к объектам домена, а затем DTOS
- Есть ли общие для получения DTOs от WCF службы или я должен использовать домен объекты (я знаю, что уже обсуждалось здесь много, но от чего I понимаете, это применимо, если объекты домена не являются , которые сложны и могут сохранить отображение и кодирование при изменении моих доменных объектов и базы данных) Не приведет ли это к очень сложной цепочке связи, например: Объекты < -> Объект домена < -> DTO < -> Объект домена
- Где вы размещаете проверку ? Я думал поставить базовую проверку в просмотры или презентаторы (например, форматирование, null/not null values, ...), а основная проверка идет на объекты домена ...?
- При создании новой записи в базе данных, скажем, новый пользователь, , должен ли клиент также передать новый DTO на сервер, или лучше создать метод службы, который допускает простые типы данных, такие как строка и int ?
Извините за этот длинный пост, но я бы лучше совместить свои вопросов в одном сообщении и предоставить структуру проекта внутри.
Заранее благодарим за любой ответ.
С уважением
Благодарим вас за ответы. Основная причина для WCF заключается в том, что сторонняя программа должна также подключаться, и я не хочу, чтобы они напрямую использовали БД. Я пытаюсь создать службу без состояния. Я подумал, что будет хороший дизайн, чтобы сделать большую часть «работы с доменом» на сервере приложений для «единой точки управления». Но, возможно, мне нужно переосмыслить структуру и упростить ее. Спасибо за ссылку, я посмотрю на нее. – Scheurich
Вам не нужно добираться до WCF, если они предназначены для доступа третьей стороны. Если услуги, которые вы предоставляете третьим сторонам, доступны только для чтения, что структура в порядке. В противном случае вам также придется использовать модель домена в сервисах, иначе вы закончите беспорядок дублированной бизнес-логики в модели домена и в службах WCF. –
Спасибо, что потратили время на мои, возможно, немые вопросы :-) Единственное, что доступно для чтения - это хороший момент. Услуги сторонних компаний доступны только для чтения, поэтому предоставление «интеллекта» клиенту представляется менее сложным. Я собираюсь сделать некоторые реорганизационные работы, чтобы посмотреть, как это выглядит тогда, и вернуться сюда, чтобы закрыть эту тему или попросить дальнейшие подсказки. Еще раз спасибо! – Scheurich