gpt4 book ai didi

c# - 我如何设计特定的父类(super class)

转载 作者:行者123 更新时间:2023-11-30 22:31:12 24 4
gpt4 key购买 nike

我正在尝试重构一个解决方案以引入另一个项目。我有一个核心项目,其中驻留了跨项目的通用类。

我试图通过使用 2 个虚构的项目来简化我的问题:假期和天气......

我为 Holidays 项目设置了一个文件加载过程设置,其中包含以下 2 个类:

public class Job
{
public virtual string CreatedBy { get; set; }
public virtual DateTime? CreatedDate { get; set; }
public virtual Security Security { get; set; }

protected IList<File> _files = new List<File>();
public virtual IEnumerable<File> Files
{
get { return _files; }
}
}

public class File
{
public virtual string FileName { get; set; }
public virtual FileType FileType { get; set; }
public virtual FileStatusType FileStatusType { get; set; }
public virtual Job Job { get; set; }
}

Weather 项目的文件加载过程与 Holidays 的结构完全相同,只是 Jobs 类没有 Security 属性。

我的问题是,是否有可能以某种方式将这两个类移动到核心项目中以允许两个项目使用它们?显然 Weather 不需要 Security 属性,所以我想我应该有一个没有 Security 的 Core.Job 类,然后在 Holidays.Job 中扩展 Core.Job。

但是一旦我这样做了,在 Core.File 类中,它指的是什么 Job?因为它位于 Core 项目中,所以它必须是 Core.Job。那么我是否需要让 Job 和 File 位于 Holidays 中,而 Weather(以及任何其他 future 的项目)使用 Core.Job 和 Core.File?

我不希望核心项目对子项目有任何引用。

我正在使用 NHibernate,所以有映射文件 - 增加了复杂性。

希望这足够清楚

谢谢

最佳答案

你当然可以这样做,但我不确定它是否会给你带来真正的好处:

  • Core 本身是否以任何方式与基础 Job 一起工作?如果没有,在每个项目中单独实现 Job 可能会帮助您保持松耦合,即使我有点多余。在我编写的代码中,我有时会通过提取接口(interface)而引入不必要的依赖关系,而没有增加真正的好处。这就是我有点谨慎的原因。
  • 如果 Core 实际使用它,重构到公共(public)基础 Job 的部分可能是它使用的接口(interface)。
  • 您可能会想到接口(interface)而不是基类。 Security 在语义上可能属于另一个接口(interface)。此外,您将对类的大量控制权交给了核心
  • 您是否曾经将一项工作从一个项目交给另一个项目(或者它们是否通过 NHibernate 映射到同一个数据库表?)?如果不这样做,内部冗余类也可能没问题。

关于c# - 我如何设计特定的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9361949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com