【问题标题】:C#: where to put "save()" method?C#:在哪里放置“save()”方法?
【发布时间】:2010-12-10 20:16:40
【问题描述】:

我有一个问题,这是一个例子
我有一个模型类:股票


    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()”方法,我应该放在哪里,
Option1 : 放在 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:股票似乎有点聪明,它可以自救并且更面向对象。对于选项 2,我看到很多人使用这种模式。你有什么想法?

【问题讨论】:

    标签: c# methods oop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可能需要阅读Active Record patternRepository pattern。你介于两者之间。

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

      【讨论】:

        【解决方案3】:

        Stock 不应该关心它的存储位置,因此 save 和 load 都应该在服务类 imo 中。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2017-04-12
              • 1970-01-01
              • 1970-01-01
              • 2012-11-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-01-15
              相关资源
              最近更新 更多