首页 / C# / C#-TDD和DDD入门
C#-TDD和DDD入门
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-TDD和DDD入门,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2356字,纯文字阅读大概需要4分钟。
内容图文
![C#-TDD和DDD入门](/upload/InfoBanner/zyjiaocheng/687/5a39b4e3425745408cd77f07a65b3a30.jpg)
我刚刚读完Eric Evans的“域驱动设计:解决软件核心中的复杂性”,并且试图编写我的第一个以域为中心的应用程序(使用C#).
我们的服务台将使用该应用程序来跟踪计算机向用户的分配.
我已绘制了一个简单的类图以反映部分域.看起来像这样…
我还确定了我的第一个功能(为用户分配计算机)并为此编写了测试…
[Test]
public void AllocateToUser()
{
var user = new Owner("user1");
var computer = new Computer("computer1");
computer.Allocate(user);
Assert.AreEqual(user.Username, computer.AllocatedTo.Username);
}
最后,我编写了代码以通过测试.
public class Computer
{
public Computer(string name)
{
Name = name;
}
public string Name
{ get; private set; }
public Owner AllocatedTo
{ get; private set; }
public void Allocate(Owner owner)
{
AllocatedTo = owner;
}
}
public class Owner
{
public Owner(string username)
{
Username = username;
}
public string Username
{ get; private set; }
}
到目前为止,一切都很好(我认为).
但是,显然,这些都没有解决持久性问题.我想我需要为计算机介绍一个存储库类.大概是这样的:
public class ComputerRepository
{
public void Store(Computer computer)
{
//Some persistence logic here (possibly using NHibernate?)
}
}
现在我被卡住了.如何确保对计算机分配的用户所做的更改传递到存储库?
我似乎有以下选择:
>修改Computer类的Allocate方法的实现,以实例化ComputerRepositry的实例并调用Store方法.
>创建一个接口IComputerRepository;修改Computer的构造函数,以要求提供实现IComputerRepository的类的实例.在Allocate方法中,针对此注入的实例调用Store.
>创建一个服务(AllocationService),它将包装对“分配和存储”的调用.
>将可重复性传递给客户端,对调用代码强制执行两个步骤:
>在计算机类的实例上调用分配
>实例化ComputerRepository的实例并调用Store.
这些似乎都不令人满意:
>很难测试,因为我将直接在Computer类中实例化存储库.
>通过使用依赖项注入避免了这个问题.但是,它仍然很丑陋,因为每次我要实例化Computer时,都需要传递IComputerRepository的某些实例.
>太程序化,无法将行为封装在域实体类中.
>看起来很难看.
我该怎么办?
解决方法:
通常,我会将行为和持久性视为两个不同的关注点,并分别对其进行测试.
域对象应该不考虑存储库的存在(尽管显然不是相反的).
在这种情况下,我们要做的是创建一个Controller(或Service),该Controller负责从其存储库加载适当的对象,调用对象上的行为,然后调用存储库以保持更新.
然后,您可以使用模拟存储库测试控制器,以检查控制器是否使用更新的对象调用存储库.
内容总结
以上是互联网集市为您收集整理的C#-TDD和DDD入门全部内容,希望文章能够帮你解决C#-TDD和DDD入门所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。