2011-03-15 60 views
1

我想显示一堆我使用WPF的不同数据对象。这些数据对象在数据中不同。他们有共同的属性,但他们也有一些不同的属性。将会有一个引用这些实体的“主”类。每个主类都可以具有其中的每种数据类型。NHibernate,WCF,WPF架构问题

即使在数据库级别,我也很难设计它们。我应该为每个数据对象创建一个表,从而可以轻松地使用NHibernate获取数据(只需引用其中一个实体)。这使得使用WCF很难使用。如果我想要在WPF中显示这些数据,我可能需要收集一些变体,这就是我没有的。

我可以将所有数据类型放入同一个表中,并对所有者ID和数据类型ID有多列唯一约束。但是,我可能在我的实体中有空属性,并且在UI中显示也很困难。这也会使编辑实体变得复杂,因为我必须注意用户可以编辑哪些属性并且不能编辑。

我想在视觉上,单位应该是这样的,第一种方式:

public class Master 
{ 
    int Id 
    DataType1 Data1 
    DataType2 Data2 
} 

public class DataType1 
{ 
    int Id 
    string SomeString 
    string AnotherString 
} 

public class DataType2 
{ 
    int Id 
    string SomeString 
    string DifferentString 
} 

而这第二种方式:

public class Master 
    { 
     int Id 
     List<DataType> Types 
    } 

public class DataType 
{ 
    int Id 
    string SomeString 
    string AnotherString 
    string DifferentString 
} 

那么这将是最好的方式?或者有没有比这两种方式更好的方法(可能有)?

+0

这真的取决于很多东西: 1.什么DataTypes代表?你需要 2.不同的数据类型? Master是否有1,2(最大)或多个(未知)数量的DataType对象? 3.它看起来像Id和SomeString在数据类型中很常见,可以将它们放在基类中?并从该基类继承? 4.在第二个设计中,DataType AnotherString和DifferentString总会有一个值吗? – 2012-04-26 20:47:34

回答

0

这实际上取决于您的业务案例,因为它不是这样的架构问题。如果已知数量的DataType-s,则执行静态(一对一)引用(第一个示例)。

如果您具有未知或动态数量的DataType-s,则除了将这些DataType-s作为“主”对象中的列表外,没有别的选择。

+0

到目前为止,这是一个静态数字,但有可能会有更多的下线。如果他们是静态的,我将如何在WPF中显示它们? – Harry 2011-03-15 12:51:33

+0

那么这是另一种情况,我已经知道他们中有更多的人。你必须仔细考虑你正在解决的商业案例,这是最重要的。如何在WPF中显示一对一的关系对象?为什么会是这个问题?您可以使用一个一个显示控件...我想将它们显示在网格中,这是另一个指标,您可能需要一对多关系对您的主控对象。 – 2011-03-15 12:58:07

+0

我打算使用容器控件,是的。但考虑一下,我想这不是必须的。 – Harry 2011-03-15 13:09:20