Im очень много нового в разработке программного обеспечения. Лично я считаю, что многоуровневая архитектура - отличный способ уменьшить сложности, возникающие в процессе разработки программного обеспечения в объектно-ориентированном подходе, и не говоря уже о том, чтобы сохранить ваш код организованным. Теперь я сталкиваюсь с некоторыми проблемами, которые нужно вводить с помощью DDD (Domain Driven Design). Конечно, начинающие уровни.
Вот он -
Скажем, я хочу создать приложение для сохранения связанных с человеком данных в базе данных и отображения сведений о человеке в wpf datagrid (DDD определенно не для приложений такого масштаба, а просто для того, чтобы все было просто для такой забавной, как я), Итак, я разработал класс домена "Лицо", что-то вроде -
public class Person
{
public Class1(dataType fieldAParam)
{
_fieldA = fieldAParam;
}
private dataType _fieldA;
public dataType PropertyA
{
//encapsulates _fieldA
}
private dataType _fieldB;
public dataType PropertyB
{
//encapsulates _fieldB
}
private dataType _fieldC;
public dataType PropertyC
{
//encapsulates _fieldC
}
public dataType PropertyX
{
//some code based on private fields
}
public dataType PropertyY
{
//some code based on private fields
}
private dataType MethodPQR(dataType param)
{
//some code
}
public dataType MethodUVW(dataType paramOne, dataType paramTwo)
{
//some code
}
}
Теперь, мое понимание DDD говорит, что архитектура (простейшая версия) должна быть следующей (plz, исправьте меня, если я ошибаюсь) -
Примечание:
-
Я хочу, чтобы datagrid привязывался к некоторому ObservableCollection, чтобы мгновенно отразить любые изменения.
-
Это приложение wpf, но не обязательно должно быть в шаблоне MVVM, и я намеренно хочу использовать код позади (я понятия не имею, что сам код представляет собой уровень приложения)
Итак, мои вопросы -
-
Какие коды должны принадлежать слою приложения?
-
Я предполагаю, что я определенно не должен привязывать ObservableColletion моего объекта домена (Person) как itmsSource файла datagrid. Какой тип объекта я должен извлечь из объекта домена и как?
-
Чтобы сохранить развязку между объектами уровня представления и объектом уровня домена, может быть соглашение, подобное
"never instantiate domain objects directly in presentation layer"
. Каковы же не "прямые" подходы? -
Если код-Behind разговаривает с уровнем приложения, то должен ли интерфейс приложения разговаривать с репозиторием? Но что, если нужен какой-то доступ к домену, который НЕ связан с доступом к данным (может быть, нет в этом приложении, но это может произойти, правильно)? Whos, что X парень в доменном слое, с которым должен говорить уровень приложения?
Я знаю, что все мои вопросы и проблемы имеют очень высокий уровень. Но на самом деле это вопросы и проблемы. Итак, если у кого-то есть время, любой ответ будет оценен.
EDIT: Я не уверен, что в Data Repository должна быть ссылка на модель домена.