Я изначально разработал свою систему, следуя примеру архитектуры s # outlined in this codeproject article (К сожалению, я не использую NHibernate). Основная идея заключается в том, что для каждого объекта домена, который должен был бы связываться с уровнем сохранения, у вас будет соответствующий объект доступа к данным в другой библиотеке. Каждый объект доступа к данным реализует интерфейс, и когда объект домена нуждается в доступе к методу доступа к данным, он всегда кодирует интерфейс и никогда не относится к самим DAO.Как структурировать уровень доступа к данным?
В то время, и все же, я думал, что этот дизайн очень гибкий. Однако, поскольку количество объектов в моей модели домена выросло, я нахожусь под вопросом, если здесь нет организационной проблемы. Например, почти каждый объект в домене заканчивается соответствующим объектом доступа к данным и интерфейсом доступа к данным. Не только это, но каждый из них находится в другом месте, которое сложнее поддерживать, если я хочу сделать что-то простое, например, перемещение по некоторым пространствам имен.
Интересно, что многие из этих DAO (и их соответствующих интерфейсов) являются очень простыми существами - наиболее распространенным является только один метод GetById(). Я в конечном итоге с целой кучей объектов, таких как
public interface ICustomerDao {
Customer GetById(int id);
}
public interface IProductDao {
Product GetById(int id);
}
public interface IAutomaticWeaselDao {
AutomaticWeasel GetById(int id);
}
Где их реализаторы, как правило, очень тривиальное тоже. Это заставляет меня задаться вопросом, не будет ли проще идти в другом направлении, может быть, переключить мою стратегию, имея один объект для простых задач доступа к данным и резервируя создание выделенных объектов доступа к данным для тех, кому что-то нужно немного больше сложно.
public interface SimpleObjectRepository {
Customer GetCustomerById(int id);
Product GetProductById(int id);
AutomaticWeasel GetAutomaticWeaselById(int id);
Transaction GetTransactioinById(int id);
}
public interface TransactionDao {
Transaction[] GetAllCurrentlyOngoingTransactionsInitiatedByASweatyGuyNamedCarl();
}
Есть ли у кого-нибудь опыт работы с подобной архитектурой? В целом я очень доволен настройкой, поскольку теперь моя единственная забота - управлять всеми этими маленькими файлами. Мне все еще интересно, какие существуют другие подходы к структурированию уровня доступа к данным.
никогда не слышал о дозвуковой прежде, спасибо за подсказку. Выглядит очень интересно – 2008-09-28 18:37:19