Эй, ребята. Я читаю Поэзию Мартина Фаулера. Mapper данных модель работает с объектами домена таким образом:Должна ли модель данных Mapper ссылаться на модель домена?
class AbstractMapper...
protected DomainObject load(ResultSet rs) throws SQLException {
Long id = new Long(rs.getLong(1));
if (loadedMap.containsKey(id)) return (DomainObject) loadedMap.get(id);
DomainObject result = doLoad(id, rs);
loadedMap.put(id, result);
return result;
}
abstract protected DomainObject doLoad(Long id, ResultSet rs) throws SQLException;
class PersonMapper...
protected DomainObject doLoad(Long id, ResultSet rs) throws SQLException {
String lastNameArg = rs.getString(2);
String firstNameArg = rs.getString(3);
int numDependentsArg = rs.getInt(4);
return new Person(id, lastNameArg, firstNameArg, numDependentsArg);
}
Это означает, что Mapper Данные, DAL ссылки домена. Я думал, что DAL не должен иметь таких ссылок. Как вы думаете?
Спасибо за ответ, всего один момент. Если домен не ссылается на DAL, то как он будет его использовать? Возможно, не требуется напрямую ссылаться на DAL, однако для работы с источником данных необходимо иметь некоторые интерфейсы. – Danil
DAL должен быть связан с постоянными объектами домена, а не с доменом. Итак, если один из ваших доменных объектов является объектом Customer, в DAL у вас может быть что-то вроде CustomerRepository с методами, которые загружают и сохраняют объекты Customer. Я тоже видел эту логику в самом домене, поэтому я не говорю, что это единственный способ структурировать проект, но он кажется мне более чистым. – newdayrising
Хм, Так как хранилища работают с объектами домена, у них есть доступ к методам доменных объектов, которые являются логикой домена. Разумеется, очевидно, что эти методы нельзя использовать в хранилищах, однако инкапсуляции нет. Может быть, ему нужно использовать интерфейсы в репозиториях для инкапсуляции бизнес-логики из DAL? – Danil