将优化算法与应用分离

时间:2012-04-20 09:59:06

标签: c# windows architecture service n-tier-architecture

我刚开始做硕士论文。我的任务是创建一个优化公寓供暖的系统。公寓配有可测量当前温度的传感器。

通过使用这些温度和一些其他措施,进行优化并将信号发送回调节温度的公寓。优化将以循环方式全天候全天候完成。

因此,系统必须与传感器通信,进行优化并记录数据。此外,应该向公寓提供基于webb的用户界面,以便他们可以看到当前的电力/水消耗。

系统将使用C#/ .Net。

编写

我没有必须积累构建大型系统的经验,并且只有有限的.Net经验。我最初的想法是建立一个N层架构,在最高层提供两个接口。用户的一个Web界面,然后是传感器的某种界面(在架构中具有以下优化算法)。

Preliminary architecture

我想在架构中尽可能多地重用组件,但是我希望尽可能地将优化算法与其余组件分开。也就是说,算法中的crasch不应该影响系统的其余部分(传感器接口除外)。

所以,我的问题是。我应该以什么方式实施优化部分?我应该创建一个Windows服务还是应该让它在自己的线程中运行?

如果Windows服务是一个不错的选择,是否可以在层次结构中进一步使用组件?也就是说,数据库存储库,所有对象等。

建筑的选择是否良好。如果没有,为什么?

在设计/实施系统时,我应该考虑一些特殊的事情吗?

请注意。目前尚不清楚传感器与系统之间的通信将如何进行。

度过美好的一天!

1 个答案:

答案 0 :(得分:2)

首先,一些关于你的方法的评论。我的建议是尽可能简化系统。避免n层思考,服务和其他复杂的事情 - 直到你需要它。然后,当您发现自己需要它时,您可以创建它。

专注于在构建系统时添加内容的价值。不要开始创建可重用的组件和算法(您后来发现它们不是您首先想到的可重用或可用的)。相反,首先要为最终用户解决问题。以最简单的方式解决它。然后解决下一个问题。然后分析您的代码,看看您是否可以找到可以提取到可重用部分的公共部分。然后通过解决另一个问题重复。

尽量每次都尽可能地解决小问题。当你解决了10或20个问题时,你会发现你已经创建或者可以以某种方式创建某种分层或组件化。

通过创建多个传感器为传感器创建界面。当只有一个传感器时,您只能猜测界面应该是什么样子。有了更多的传感器,你就会知道。

关于稳健性(在调用传感器时不会崩溃),这取决于您想要它的强大程度。在传感器上调用方法并因此在同一过程中执行传感器代码时,一个全能的问题将解决大多数问题,并且是最简单的解决方案。我肯定会从这开始。我甚至不会在不同的线程中执行它,除非你需要它(比如创建一个响应式UI)。

将传感器移动到它自己的进程(服务)会让操作系统处理诸如写入坏内存之类的问题。如果传感器是用C#编写的,通常不会遇到这些问题。

如果您选择将传感器代码放入服务中,则仍然可以重用代码。只需将公共代码放在两个进程都可以访问的程序集中。