gpt4 book ai didi

c# - 另一个应用程序架构问题

转载 作者:行者123 更新时间:2023-11-30 17:17:06 25 4
gpt4 key购买 nike

我正在尝试一些 DDD,我将尝试以最简单的方式描述我所做的事情。

核心项目
核心项目包含实体、VO 和领域服务。例如,我有 User 实体和 UserRelation 实体。我想我们都知道什么是 User 实体。 UserRelation 包含有关用户如何相互连接的信息,例如关注和连接(双向关注)。因此,我有 UserDomainService 和 Follow(user,user) 和 Connect(user, user) 等无状态方法。

public class User
{
public string Name { get; set; }
public string Username { get; set; }

public void ChangeUsername(stirng newUsername)
{
ApplyEvent(new UserUsernameChanged(newUsername));
}
}

public class UserRelation
{
ctor(User1, User2, isBidirectional)
public User User1 { get; set; }
public User User2 { get; set; }
public bool IsBidirectional { get; set; }
}

public class UserDomainService
{
public UserRelation Follow(User user1, User user2)
{
return new UserRelation(user1,user2,false);
}
}

存储库项目

我正在使用 NHibernate,所以我决定不创建这样的项目。相反,我直接使用 NHibernate。例如,在我的 UI 中,我从数据库中获取一个用户对象,更改它然后调用 session.Save(user)。

问题

如果我想像下面那样进行操作,我会这样做:

  • 从数据库中获取一些信息
  • 从服务中调用 Follow(user1, user2)
  • 将 UserRelation 对象保存到数据库最后应用程序代码变得有点复杂。想象一下,如果我们想在 2-3 个地方使用这段代码,并且在某个时候我们必须重构它。

我的解决方案
我的解决方案是创建一个 ApplicationService 项目,该项目将完成肮脏的工作并强制消费者使用 ApplicationService 而不是直接使用实体和域服务

public class UserApplicationService
{
ctor(UserDomainService userDomainService){}

User GetUser(Guid id)
{
return NhibernateSession.Get(id)
}

public void Follow(Guid user1Id, Guid user2Id)
{
var u1 = GetUser(user1Id);
var u2 = GetUser(user2Id);
var userRelation = _userDomainService.Follow(u1,u2);
NhibernateSession.Save(userRelation);
}

public void ChangeUsername(Guid user, string newUsername)
{
user.ChangeUsername(newUsername);
NhibernateSession.Save(user);
}
}

这个应用服务好还是不好?如您所见,新服务也充当存储库,因此我们可以创建一个 UserRepository 类,但现在让我们跳过它。困扰我的是这两种方法中的参数。他们接受 Guid,服务从数据库中检索用户。另一种选择是直接传递用户对象。 ChangeUsername 方法类似于用户实体 + 持久性中的方法。

嗯,你怎么看这个?

最佳答案

我个人看不出有什么不妥,事实上,我工作的公司就是这样做的,只要您从该服务中抽象出数据访问,它就可以成为业务层的一部分,作为两者之间的中介数据层和 ui 层,它使您免于重复自己并确保触发为特定操作概述的任何规则。

关于c# - 另一个应用程序架构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com