Я попытался найти решение этой проблемы с именованием, но нигде в Интернете не нашел аналогичного использования. Это может быть либо у нас есть поток проектирования в модели предметной области, либо мы просто не используем подходящее имя для так называемых «ValueObjects».
Пожалуйста, прочтите ниже ..
Мы используем Domain Driven Design с шаблоном CQRS. Ниже показано, как была разработана модель предметной области.
P.S Не связано, но для вашей информации, наше приложение использует ASP.NET MVC, а контроллер взаимодействует с уровнем обслуживания. DTO (объекты передачи данных) передаются в / из контроллеров MVC, чего нет на приведенной выше диаграмме.
Проблема в том, что мы неправильно используем ValueObject. Согласно определению Мартина Фаулера наши ValueObject не являются истинным представлением ValueObject. http://martinfowler.com/bliki/ValueObject.html
Например, у наших ValueObjects есть личность.
public class NoteValue
{
public int Id { get; set; }
public string NoteName { get; set; }
public string NoteNumber { get; set; }
public DateTime NotExpiry { get; set; }
}
Эти объекты ValueObject просто переносят данные между командами, AggregateRoots и объектами домена. Например, AggregateRoot просто создает объекты ValueObjects на основе объектов домена и возвращает эти объекты ValueObject на уровень команд.
Ниже представлена не полная реализация. Просто простой пример, демонстрирующий взаимодействие
Метод расширения AggregateRoot:
private static IList<NoteValue> ToValueObject(this ICollection<Note> source)
{
var values = new List<NoteValue>();
if (source != null)
source.ForEach(i => values.Add(i.ToValueObject()));
return values;
}
AggregateRoot:
Public IList<NoteValue> GetNotesValues()
{
return this._notes.ToValueObject();
}
Команда:
var motesValues = notesAggregate.GetNotesValues();
Мы изо всех сил пытаемся найти подходящее название для этих так называемых «ValueObjets». Они тоже не кажутся DTO, и мы также хотим иметь возможность отличаться от DTO, которые используются на уровне Services. В частности, мы хотим знать подходящее имя, которое мы можем вызывать для этих типов объектов (ValueObjects). Любые мысли приветствуются.