У меня есть веб-приложение .net, которое я взял на себя, которое в прошлом страдал от того, что вся бизнес-логика находилась в коде за страницами и очень привязана к пользовательскому интерфейсу..NET Application Architecture - что является оптимальной сборкой для этого класса?
Я потратил некоторое время на рефакторинг, в частности, на переход кода доступа к данным в специальный проект доступа к данным «Company.DataAccess» (например). Другие логические части кода также имеют свои собственные сборки.
То, что я не устраивает, является размещение объектов, которые должны быть общими для всех сборок:
К примеру - В моем проекте «Company.ClientDataImport», у меня есть классы, содержащие бизнес-логику для импорт данных клиента.
Один конкретный элемент функциональности, содержащий этот код, заключается в том, что формат импорта клиента можно сопоставить с нашим стандартным форматом импорта. Итак, у меня есть класс «DataImportFieldMappingInfo» в сборке «Company.ClientDataImport»:
public class DataImportFieldMappingInfo {
int CompanyFieldName
{
get;
set;
}
int ClientFieldName
{
get;
set;
}
}
Эти отображения сохраняются в базе данных, поэтому в какой-то момент, мне нужно, чтобы заполнить коллекцию с экземплярами этого объекта.
Одной из целей архитектуры является то, что вся база данных IO должна обрабатываться компанией «Company.DataAccess».
Я хочу, чтобы «Company.DataAccess» знала класс DataImportFieldMappingInfo, чтобы он мог использовать класс, предназначенный для хранения этого типа данных, но это означает, что «Company.DataAccess» и «Company.ClientDataImport» оба должны знать DataImportFieldMappingInfo, чтобы они могли общаться с использованием одних и тех же классов.
Моим решением этой общей проблемы до сих пор является использование другой библиотеки под названием «Company.DomainEntities», которая содержит классы для объектов, которые совместно используются в других сборках в приложении. Это хорошо работает, и все сборки могут общаться в терминах одних и тех же объектов. Классы действительно просто содержат свойства, поэтому они представляют собой только контейнеры данных, а не содержащие логику приложения.
Что мне не нравится в этом, так это то, что DataImportFieldMappingInfo является проблемой импорта данных, и поэтому я считаю, что это должно быть в этом пространстве имен и, следовательно, в проекте «Company.ClientDataImport». Ограничения ссылочной ссылки препятствуют этому, поэтому я должен использовать проект «Company.DomainEntities» как средний человек.
С моей архитектурой что-то не так, или это обычная практика в такой ситуации?
Не могли бы вы расширить идею интерфейса? Я понимаю интерфейсы, но я не уверен, как я могу применить его в этой ситуации. – gb2d
Отлично, спасибо. – gb2d