我在这里遇到了问题,我正用头撞墙。
我有一个对象是我模型的一部分。让我们称它为 MyObject。它具有以下属性:
- 财产1
- 财产2
- 财产3
- 属性4.1
- 属性4.2
- 属性4.3
前三个属性是独立的。4th、5th 和 6th 是一个集合,我们称之为 Properties4Set。
Properties4Set 依赖于 property1、2 和 3。因此,如果这些值中的任何一个发生变化,则必须重新计算整个集合。
计算方式如下:我有一个文件,其中我有 Property1 和默认 Properties4Set 之间的映射。所以基于 Property1 我必须加载这个默认集,然后应用 Property2 和 3 的规则。
我有一种 mvvm 应用程序在这里进行。我创建了一个存储库,可以创建我的域对象并使用正确的值返回它。一旦我想更改 Property1,我的问题就开始了。因为这意味着我需要一个新的默认 Properties4Set。
目前,我看到了两种处理方法。
选项 1:在存储库中实现“GetNewDefaultSet(property1)”方法,并将存储库注入 MyObject。一旦 Property1 更改,从存储库加载一个新集,并根据 2 和 3 重新计算值。
选项 2:在存储库中实现“GetAllDefaultSets()”方法,并将整个 Properties4Sets 集合注入 MyObject。一旦 Property1 更改,从列表中加载适当的集合。
我首先选择了 option1,但后来读到如果将存储库注入域对象,这是一个糟糕的设计。他们不应该关心如何获取他们需要的数据。我对选项 2 的问题是,如果对象一次只需要一个集合,那么注入整个集合列表似乎有点过头了。
那么,将如何处理呢?你看到另一个选择吗?
编辑
那里没有具体的实现示例,这很糟糕。
好的,这是一些代码:
/// <summary>
/// Just a DTO for how the set is actually stored, can be fetched from the repository
/// </summary>
public class MySetMapping
{
private int value1;
private float value4;
private float value5;
private float value6;
public MySetMapping(int value1, float value4, float value5, float value6)
{
this.value1 = value1;
this.value4 = value4;
this.value5 = value5;
this.value6 = value6;
}
public int Value1
{
get { return this.value1; }
}
public float Value4
{
get { return this.value4; }
}
public float Value5
{
get { return this.value5; }
}
public float Value6
{
get { return this.value6; }
}
}
他是固定班:
public class MySet
{
private float value4;
private float value5;
private float value6;
public MySet(float value4, float value5, float value6)
{
this.value4 = value4;
this.value5 = value5;
this.value6 = value6;
}
public float Value4
{
get { return this.value4; }
}
public float Value5
{
get { return this.value4; }
}
public float Value6
{
get { return this.value4; }
}
}
这里是我需要的实际对象:
/// <summary>
/// the main business object, has actually more properties
/// </summary>
public class MyObject
{
private int value1;
private int value2;
private int value3;
private MySet mySet;
public MyObject(int value1, int value2, int value3)
{
this.value1 = value1;
this.value2 = value2;
this.value3 = value3;
//needs something to get the correct set for the three values
}
public int Value1
{
get { return this.value1; }
set
{
this.value1 = value;
//adjust set
}
}
public int Value2
{
get { return this.value2; }
set
{
this.value2 = value;
//adjust set
}
}
public int Value3
{
get { return this.value3; }
set
{
this.value3 = value;
//adjust set
}
}
public float Value41
{
get
{
return this.mySet.Value4;
}
}
public float Value42
{
get
{
return this.mySet.Value5;
}
}
public float Value43
{
get
{
return this.mySet.Value6;
}
}
也许您现在可以更好地理解它。