使用工厂模式保存数据?

JSp*_*ang 11 c# design-patterns dependency-injection strategy-pattern factory-pattern

我已经越来越熟悉工厂模式(以及战略模式)以及模式可以带来的巨大好处.但是,我一直在努力应对以下情况:

以前,我会做类似以下的事情,其中​​有一个经理类可以构建和保存汽车.这里没有依赖注入,并且是一个糟糕的实现,特别是在尝试单元测试时.

public class CarManager
{
    public static Car GetCarFromDatabase(int carId) { return new Car(); }

    public static void SaveCar(Car car) { }
}
Run Code Online (Sandbox Code Playgroud)

我现在看到我可以Factories为我制造不同的车,无论是来自数据库,还是来自哪里!这很棒!所以,这是我的问题:

Q1:我的理解是,Factories只应构建对象,这是正确的吗?如果是这样,我的第二个问题呢?

Q2:如果我按照工厂模式构建我的对象,我应该如何保存我的对象?这有不同的模式,还是我不完全理解工厂模式?

Dav*_*ite 15

工厂模式应该帮助创建对象.这就是为什么它被归类为"创造"模式.要回答您的第一个问题,它不应该用于持久化对象.

所述存储库模式是应该用于从持久性机制对象保存到一些持久机制或恢复数据的持久性图案.实际上,根据Martin Fowler的说法,企业模式应该与典型的设计模式不同.

在考虑你的问题时,你想看看SOLID中的S原则,原则指出一个类应该只有一个责任,这意味着它应该有一个改变的理由.在这种情况下,当谈论创建对象以及保存(持久化)对象的对象时,您有一个有两个原因需要更改的类.现在,看起来它可能是一个单一的责任,因为Repository可以检索并将对象保存到您的应用程序中,并且检索可以看起来像工厂(并且通常是存储库中的工厂对象),但是在您所描述的内容中,你的对象有太多的责任.