Понимание доменного дизайна - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь понять DDD уже несколько недель. Это очень запутанно. Я не понимаю, как я организую свои проекты. У меня много вопросов по UnitOfWork, Repository, Associations, и этот список можно продолжить ...

Давайте рассмотрим простой пример.

Album and Tracks

Album: AlbumId, Name, ListOf Tracks
Tracks: TrackId, Name
  1. Должен ли я выставлять треки как свойство IList / IEnumerabe в альбоме? Если это, как я могу добавить альбом? ИЛИ я должен выставить ReadOnlyCollection of Tracks и выставить метод AddTrack?

  2. Как загрузить дорожки для альбома [при условии отложенной загрузки]? должен ли получатель проверить нулевое значение, а затем использовать репозиторий для загрузки треков, если это необходимо?

  3. Как мы организуем собрания. Как то, что есть в каждой сборке? Model.dll - это только доменные сущности? Куда идут репозитории? Интерфейсы и реализации обоих. Могу ли я определить IAlbumRepository в Model.dll? Infrastructure.dll: что это должно иметь?

  4. Где определяется единица работы? Как взаимодействуют хранилище и единица работы? Или они должны? Например. Если мне нужно добавить несколько треков в альбом, опять же, должно ли это быть определено как AddTrack в альбоме ИЛИ должен ли быть метод в хранилище? Независимо от того, где находится метод, как мне реализовать единицу работы здесь?

  5. Должен ли пользовательский интерфейс использовать Infrastructure..dll или должен быть ServiceLayer?

Мои вопросы имеют смысл?

Привет

1 Ответ

0 голосов
/ 22 декабря 2011

Вопрос 1, я предлагаю такую ​​структуру:

public class Album
{
    public int AlbumId { get; set; }

    /// <summary>
    /// Readonly, foreach, public
    /// </summary>
    public IEnumerable<Track> Tracks
    {
        get { return TrackList; }
    }

    /// <summary>
    /// Protected for repository/ORM
    /// </summary>
    protected IList<Track> TrackList { get; set; }

    public void AddTrack(Track track)
    {
        //Here you can put additional logic
        TrackList.Add(track);
    }

    public void RemoveTrack(Track track)
    {
        //Here you can put additional logic
        TrackList.Remove(track);
    }
} 
public class Track
{

}

Напишите открытое свойство IEnumerable для дорожек, чтобы разрешить доступ только для чтения, и для циклов.

Защищенное свойство содержит дорожки и может использоваться ORM.

Напишите методы добавления и удаления треков в альбом. В эти методы вы можете поместить дополнительную логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...