C# 具有依赖关系的数据对象
我试图找到一个存在的问题,但我不知道如何简洁地陈述它。目前我有一个对象集合,每个对象都有一个状态对象。状态对象本身具有三种状态。从外部数据源读入的原始状态、显示状态和输出状态。原始状态用于外部查找,以说明显示的状态应该是什么。显示的状态是用户可以更新的唯一状态。输出状态需要根据程序处于“可视模式”还是“非可视模式”而改变。我希望在显示的状态更新时进行此更改。以前,项目状态没有被抽象出来,项目只有一个状态。然后,我们对项目进行后处理,并将其状态更改为所需的输出状态。这需要9秒以上的时间来检查所有120000项并更新其输出状态。由于之前的重构,我现在已经抽象出了显示和输出状态,并希望进一步优化此输出状态转换。当然,我想在数据写入之前进行输出转换,但是数据写入到多个文件中,因此需要在多个位置进行此转换 示例:显示的状态正在更新为“坏”,因此,如果程序处于“视觉模式”,则输出状态需要更新为“好”。但如果程序处于“非可视模式”,则会设置为“坏” 所以我的问题是如何管理集合中数据对象所需的逻辑依赖关系?我曾想过使用依赖注入,但我可能不得不手动执行,而不是通过Unity的“魔力”。另外,如果只给一个新的Status对象一个起始状态,那么它看起来会很混乱。集合位于主对象内部,因此我确实考虑过在那里使用方法来管理集合,但这似乎有点严格,而且仅迭代和读取/更新状态对象更难 下面是类结构的表示:C# 具有依赖关系的数据对象,c#,design-patterns,dependency-injection,unity-container,C#,Design Patterns,Dependency Injection,Unity Container,我试图找到一个存在的问题,但我不知道如何简洁地陈述它。目前我有一个对象集合,每个对象都有一个状态对象。状态对象本身具有三种状态。从外部数据源读入的原始状态、显示状态和输出状态。原始状态用于外部查找,以说明显示的状态应该是什么。显示的状态是用户可以更新的唯一状态。输出状态需要根据程序处于“可视模式”还是“非可视模式”而改变。我希望在显示的状态更新时进行此更改。以前,项目状态没有被抽象出来,项目只有一个状态。然后,我们对项目进行后处理,并将其状态更改为所需的输出状态。这需要9秒以上的时间来检查所有1
class MyMapObject
{
// This will have 100000+ items
public Dictionary<Coordinate,Item> MapCollection { get; set; }
/*
Various other properties and methods
...
*/
}
class Item
{
public ItemStatus Status { get; set;}
/*
Various other properties and methods
...
*/
}
class ItemStatus
{
public State OriginalState { get; private set; }
public State OutputState { get; private set; }
public State ShownState
{
get { return _shownState; }
set
{
_shownState = value;
SetOutputState();
}
}
private void SetOutputState()
{
case DieState.Bad: // How do I inject visualInspectionMode?
OutputState = visualInspectionMode ? DieState.Good : DieState.Bad;
break;
// other states ...
}
}
类MyMapObject
{
//这将有100000多个项目
公共字典映射集合{get;set;}
/*
各种其他性质和方法
...
*/
}
类项目
{
public ItemStatus状态{get;set;}
/*
各种其他性质和方法
...
*/
}
类项目状态
{
公共状态原始状态{get;private set;}
公共状态OutputState{get;private set;}
公共州ShownState
{
获取{return\u shownState;}
设置
{
_shownState=值;
SetOutputState();
}
}
私有void SetOutputState()
{
case DieState.Bad://如何注入visualInspectionMode?
OutputState=visualInspectionMode?DieState.Good:DieState.Bad;
打破
//其他国家。。。
}
}
状态对象本身具有三种状态。从外部数据源读入的原始状态、当前状态和输出状态
我们要考虑国家模式,所以这很麻烦。您将拥有状态对象,而不仅仅是enum
属性。该模式允许恢复到以前的状态,但至少我们正在研究某种链表结构
CurrentState
vsOutPutState
听起来像是在两次定义相同的状态。我最初的猜测是,我们想要构建一个CurrentState
的状态对象,它将以“输出状态”的方式运行。也就是说,OutputState
应该是一种方法
集合位于主对象内部,因此我确实考虑过在那里使用方法来管理集合,但这似乎有点严格,而且仅迭代和读取/更新状态对象更难
如果您真的想要控制集合,这实际上是很好的。这可以使对象的外观、感觉和行为类似于主对象
,而不是通用的.net集合对象
我曾想过使用依赖注入,但我可能不得不手动执行,而不是通过Unity的“魔力” 每次对象更改状态时都使用
Unity
容器?听起来有点过分了。以及我从中理解的对DI容器概念的误用
另外,当通过给新的状态对象提供起始状态来构造新的状态对象时,它看起来很混乱 宾果 集合在主对象中,所以我确实想到了 首先设计状态机,然后再考虑集合 明确定义状态 是
错误
还是非可视化模式
?它是好的
还是可视化模式
?首先,“好”和“坏”没有任何意义。第二步是定义状态,然后重新定义状态。对于CurrentState
和OutputState
似乎也是如此
明确定义动作->状态转换
可视
状态接口
,为导致状态更改的每个“操作”声明一个方法OutputState
可以完成其任务的时候目前我有一个对象集合,每个对象都有一个状态对象。状态对象本身具有三种状态 我想这应该是一个单独的类。状态对象不仅仅是一群
bool
或enum
s,它是