【问题标题】:Right Pattern to design Parent-Child class设计亲子班的正确模式
【发布时间】:2013-11-23 04:37:03
【问题描述】:

如何设计亲子班。

注意:这里的 Parent 不是基类,而是显示一对多的关系。

接近“A”

public class Company
{
   public int CompanyID;
   ...
   public IList<Branch> Branches;
}

public class Branch
{
}

接近“B”

public class Company
{   
   public int CompanyID;
   ...
}

public class Branch
{
   public int CompanyID; //which represents company object
}

分屏界面的最终UI设计:=

在视图屏幕的树视图中显示:-

Company A
    Branch 1
    Branch 2
Company B
    Branch 3
    Branch 4
    Branch 5

添加/编辑屏幕(2 个单独的屏幕):-

Company - Company Drop-down
other attributes of Branch

1) 如果我们看到查看屏幕,则方法“A”看起来很好,如果我们看到添加/编辑屏幕方法“B”看起来很好。

2) 在使用方法“A”时,当我必须返回分支数据时,我必须实际返回公司类型而不是分支类型:

Company GetBranch(int BranchID)

3) 我们的数据库设计基于方法“B”,其中分支表存储 CompanyID

有人可以建议使用什么好方法吗?

【问题讨论】:

  • 为什么使用 Id 存储对父级的反向引用?为什么不引用父对象呢?
  • 这还不是我关心的问题。如果需要,我可以将其更改为公司对象。
  • 我的首要任务是确定我应该采用哪种方法

标签: c# wpf oop design-patterns


【解决方案1】:

IMO 没有“权利”这样做。这完全取决于您计划如何使用和存储/检索数据。

将分支机构存储在公司下会导致巨大的流量开销(因为即使您只关心公司或特定分支机构,您也会始终通过所有分支机构),单独使用 ID 会导致额外的“查询”以加载所有相关数据。 我会采用类似于实体框架工作方式的实现方式:

我将拥有分支机构和公司 ID 存储库并保留导航属性(Comany.Branches、Branch.Company),并拥有一个填充仅在需要时才调用的属性的函数。

例如,您可以使用GetCompany(id) 函数仅返回公司,而GetCompanyWithBranche(id,int? brandchid) 将返回填充了其分支的公司对象(如果指定了 id,则返回单个分支)。通过这种方式,您将能够确定要检索的数据量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多