首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解领域驱动设计

理解领域驱动设计
EN

Stack Overflow用户
提问于 2010-06-11 05:05:16
回答 1查看 432关注 0票数 1

几个星期以来,我一直在努力理解DDD。这很让人困惑。我不明白我怎么组织我的项目。我有很多关于UnitOfWork,仓库,协会和名单的问题.

让我们举一个简单的例子。

代码语言:javascript
复制
Album and Tracks

Album: AlbumId, Name, ListOf Tracks
Tracks: TrackId, Name

  1. 是否应该在专辑中将歌曲公开为IList/IEnumerabe属性?如果那样的话,我该怎么添加一张专辑呢?或者我应该公开一个曲目的ReadOnlyCollection并公开一个AddTrack方法?
  2. 如何在延迟加载的情况下加载专辑的曲目?如果需要的话,getter应该检查null,然后使用存储库加载轨道吗?

  1. ,我们如何组织程序集。就像每个程序集都有什么?Model.dll -它是否只有域实体?储存库去哪儿了?接口和实现都是。我可以用IAlbumRepository来定义Model.dll吗?Infrastructure.dll :这应该是什么?
  2. 在哪里定义了工作单位?存储库和工作单元是如何交流的?或者他们应该?例如。如果我需要在专辑中添加多个曲目,是否应该将其定义为相册上的AddTrack,或者存储库中是否应该有一个方法?不管方法在哪里,我如何在这里实现工作单元?
  3. 应该使用Infrastructure..dll还是应该使用Infrastructure..dll?

我的问题有意义吗?

问候

EN

回答 1

Stack Overflow用户

发布于 2011-12-22 17:41:30

问题1,我建议采用这样的结构:

代码语言:javascript
复制
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使用。

编写方法,以添加和删除歌曲到相册。在这些方法中,您可以添加额外的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3020298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档