相关疑难解决方法(0)

重构访问遗留系统中存储库的域逻辑

我正在使用具有贫血域模型的遗留系统.

域名具有以下实体classses: ,Car,CarType,.CarComponentCarComponentType

对于其中的每一个,都有一个单独的存储库.还有许多服务可以访问这些存储库并且基本上包含所有逻辑.

我需要实现一个方法来确定CarComponentType供应商是否可以停止使用.逻辑如下:只有当前没有现有汽车的组件才能停止组件.

最初,我在服务类中实现了它.

public boolean canBeDiscontinued(CarComponentType carComponentType) {
    List<Car> cars = carRepository.getCarsWithComponent(carComponentType);
    return cars.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)

这有效 - 但是这个逻辑在代码中的其他几个地方使用.它可能会增长,它看起来像是适合类内的东西CarComponentType:

public boolean canBeDiscontinued() {
    List<Car> cars = carRepository.getCarsWithComponent(this);
    return cars.isEmpty();   
}
Run Code Online (Sandbox Code Playgroud)

但是,我不能把它放在那里,因为它需要访问存储库(据我所知,它是一个非常严重的反模式,实体要知道数据访问层).加载组件类型时,我无法加载该类型的所有汽车,因为这可能是数千个对象.我们没有使用任何ORM,所以制作一个懒惰的加载集合不仅体积大,而且非常容易出错.

像我第一次在服务类中实际使用此方法更合适吗?这不重要吗?还有另一种选择吗?我应该从另一个起点开始重构吗?

还有一个类似的问题在这里.但是我的问题与Java有关,所以我不认为这个解决方案适用于我的情况.此外,提前抱歉使用汽车和组件作为我的域模型.:)

java refactoring domain-driven-design repository

7
推荐指数
2
解决办法
820
查看次数

如何使用DDD/CQRS编写功能

我有一个银行帐户域名,如下所示.可以有SavingsAccount,LoanAccount,FixedAccount等.一个用户可以拥有多个帐户.我需要添加一个新功能 - 为用户获取所有帐户.应该写的功能在哪里以及如何?

如果解决方案遵循SOLID原则(开放 - 封闭原则,......)和DDD,那将是很好的.

任何可以使代码更好的重构都是受欢迎的.

注意:AccountManipulator将由网站客户端通过Web服务使用.

namespace BankAccountBL
{
public class AccountManipulator
{
    //Whether it should beprivate or public?
    private IAccount acc;

    public AccountManipulator(int accountNumber)
    {
        acc = AccountFactory.GetAccount(accountNumber);
    }

    public void FreezeAccount()
    {
        acc.Freeze();
    }

}

public interface IAccount
{
    void Freeze();
}

public class AccountFactory
{
    public static IAccount GetAccount(int accountNumber)
    {
        return new SavingsAccount(accountNumber);
    }
}

public class SavingsAccount : IAccount
{
    public SavingsAccount(int accountNumber)
    {

    }

    public void Freeze()
    {

    }
}
}
Run Code Online (Sandbox Code Playgroud)

读: …

.net c# design-patterns domain-driven-design cqrs

6
推荐指数
1
解决办法
2333
查看次数