c# - 将优化算法与应用程序分离

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

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

通过使用这些温度和其他一些措施,可以完成优化,并将信号发送回公寓来调节温度。优化将以循环方式进行,24/7,循环遍历所有公寓。

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

系统将用 C#/.Net 编写。

我没有构建大型系统的必要经验,并且在 .Net 方面的经验也很有限。我对此的最初想法是建立一个 N 层架构,在最高层提供两个接口(interface)。一个用于用户的网络界面,然后是某种用于传感器的界面(在架构中具有下面的优化算法)。

Preliminary architecture

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

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

如果 Windows 服务是一个不错的选择,是否可以使用层次结构中更下方的组件?即数据库存储库、所有对象等。

架构的选择好不好。如果不是,为什么?

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

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

祝你有美好的一天!

最佳答案

首先,对您的方法进行一些评论。我对您的建议是构建尽可能简单的系统。避免多层思维、服务和其他复杂的事情——直到你需要它。然后当您发现需要它时,您可以创建它。

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

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

通过创建多个传感器来创建传感器接口(interface)。当只有一个传感器时,您只能猜测界面应该是什么样子。有了更多传感器,您就会知道。

关于鲁棒性(调用传感器时不会崩溃),这取决于您想要的鲁棒性。在传感器上调用方法并因此在同一进程中执行传感器代码时的包罗万象将捕获大多数问题并且是最简单的解决方案。我肯定会从这个开始。我什至不会在不同的线程中执行它,除非您需要它(例如创建响应式 UI)。

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

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

关于c# - 将优化算法与应用程序分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244035/

相关文章:

c# - 如何使用 iTextSharp 创建 pdfformfields?

c# - 连接到 PostgreSQL

c# - 从主线程调用函数并使其与主线程中的函数并行工作

c++ - 错误消息 "iostream: no such file or directory"

java - 辩论 - 从数据库层还是Java层调用Web服务?

c# - 此正则表达式是否允许 "*"?

windows - 从 ColdFusion 访问映射的网络驱动器

c++ - 我想通过windows api制作一个时钟(GUI程序),但是时钟上的文字没有改变?

c# - 实现属性或实现子类

javascript - 如何找到我想要传递信息的Vue组件?