C#:在哪里放“save()”方法?

时间:2009-10-28 11:59:43

标签: c# methods oop

我有一个问题,这是一个例子 我有一个Model类:Stock


    public class Stock{
        //some properties, stock name, stock code;
        public String StockName{
            get,set
        }
        public String StockCode{
            get,set
        }
    }

我还有一个服务类StockService,它将从数据库加载数据并创建库存并设置属性值。


    public class StockService:IStockService{
        public Stock CreateStockByStockCode(string stockCode){
            Stock stock = new Stock();
            //load the data from db and set the stock's properties.
            stock.StockName = ...
            stock.StockCode = ...
        }
    }

所以,我的问题,我有一个“Save()”方法,我应该放在哪里,
选项1:将其放入Stock类,


    public class Stock{
        public void Save(){
            //use the repository to save into db.
        }
    }

选项2:将其放入服务类


    public class StockService:IStockService{
        public void Save(Stock stock){
            //use the repository to save into db.
        }
    } 


我认为对于选项1:股票似乎有点聪明,它可以拯救自己,更多的是面向ojbect。对于option2,我看到很多人都使用这种模式。你有什么想法?

5 个答案:

答案 0 :(得分:8)

将Save()方法放入服务将阻止Stock类需要任何有关数据库结构的知识。 将Load()和Save()放入两个不同的类中也可能会让人感到困惑。

答案 1 :(得分:5)

您可能希望了解Active Record patternRepository pattern。你在这里介于两者之间。

Active Record被认为是“更简单”,而Repository更“纯粹”,因为您可以更好地分离关注点(您的实体不需要关心数据访问)。

答案 2 :(得分:1)

我更喜欢选项2,因为你刚才说的是“股票似乎有点聪明”。我相信这会更有意义,例如,当您想要删除股票时。

答案 3 :(得分:0)

股票不应该关心它的存储位置,因此保存和加载都应该在服务类imo中。

答案 4 :(得分:0)

我同意,请选择选项2,以便将数据实体类与实际数据存储分离。顺便说一句,您可能需要查看the Repository Pattern