【问题标题】:Get a instance of an object, does it belong to the class?获取一个对象的实例,它是否属于该类?
【发布时间】:2016-03-04 13:56:58
【问题描述】:

这是我的课:

public class Boots
{
    public string Name { get; private set; }
    public int Size { get; private set; }

    public Boots(string Name, int Size)
    {
        this.Name = Name;
        this.Size = Size;
    }
}

我想创建一个从数据库中按名称获取引导的方法。 我应该把这种方法放在 OOP 思维中吗?该方法不属于启动实例,但在我看来,它属于该类。

正确的方法是在引导类中使用一个返回实例的静态方法

public static Boots GetBoots(string Name)
{
    //Get boot from db and creates a Boots by calling its constructor
    return new Boots(.....);
}

【问题讨论】:

  • 搜索“活动记录”,这个已经讨论过很多次了。
  • 您可以创建一个BootsRepository 来获取并保存Boots 的实例。 (我也在努力寻找一个比Boots 更好的名字。因为该类的复数集合在语义上会很奇怪。也许可以称之为BootPair?)
  • 您将需要某种从数据库实体创建内存对象的工厂。这几乎不属于实际的要素类 IMO。
  • BootsRepository 的想法很好。然后我与实例类有一个清晰的分离。 (对不起,命名类靴子......我应该强迫业务将它们分成一和一:)

标签: c# class oop static


【解决方案1】:

基本上这个问题很好,但是如果您使用一些 ORM、存储库或这只是 odata 请求,则缺少信息,因为我很确定您已经获得了一些代码 :) 我的方法是在这种情况下使用存储库模式,但对于这种简单的情况,您也可以考虑活动记录模式。如果不需要,请记住保持简单,不要过度设计。

【讨论】:

  • 感谢您的回复。我将研究存储库模式和活动记录模式。假设我没有使用 ORM,只是从返回到 GetBoots 功能的数据库命令中获取数据集。如果你有时间,你能给我举一个你建议的两种模式的例子吗?
  • 第一件事是,如果你使用 MS SQL,我建议使用存储过程而不是函数来处理这类事情。从设计的角度来看,函数应该更多地用于计算活动——而不是收集数据。第二件事是,在这种情况下,我会避免使用 Active Record 模式并使用存储库。我猜你使用 ADO.NET 所以看看这篇文章:blog.gauffin.org/2013/01/04/ado-net-the-right-way
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2021-11-19
相关资源
最近更新 更多