0

Эй, ребята. Я читаю Поэзию Мартина Фаулера. 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 не должен иметь таких ссылок. Как вы думаете?

ответ

2

Любой слой, включая уровень представления или уровень доступа к данным, может ссылаться на модель домена. Тем не менее, модель домена не должна ссылаться на эти уровни, поэтому ее можно потенциально повторно использовать для поддержки альтернативных интерфейсов и стратегий сохранения.

+0

Спасибо за ответ, всего один момент. Если домен не ссылается на DAL, то как он будет его использовать? Возможно, не требуется напрямую ссылаться на DAL, однако для работы с источником данных необходимо иметь некоторые интерфейсы. – Danil

+0

DAL должен быть связан с постоянными объектами домена, а не с доменом. Итак, если один из ваших доменных объектов является объектом Customer, в DAL у вас может быть что-то вроде CustomerRepository с методами, которые загружают и сохраняют объекты Customer. Я тоже видел эту логику в самом домене, поэтому я не говорю, что это единственный способ структурировать проект, но он кажется мне более чистым. – newdayrising

+1

Хм, Так как хранилища работают с объектами домена, у них есть доступ к методам доменных объектов, которые являются логикой домена. Разумеется, очевидно, что эти методы нельзя использовать в хранилищах, однако инкапсуляции нет. Может быть, ему нужно использовать интерфейсы в репозиториях для инкапсуляции бизнес-логики из DAL? – Danil

Смежные вопросы