c# - C# 中 DSL/自定义类型的工具包?

标签 c# domain-driven-design language-design dsl

所以,我有一个 C# 应用程序,它具有约 4 层深的自定义类型层次结构。

此分层的存在是为了提供数据验证和更改事件传播的干净实现。

一个例子是: DocumentNameValue -> NameValue -> StringValue -> BaseDataValue

该系统运行良好,但考虑到所有间接层,性能冲浪者。从绝对意义上讲,这并不是一个巨大的打击,但它确实加起来了。

澄清一下,性能问题似乎是数据访问时发生的嵌套调用的结果。

例如,调用 DocumentNameValue.setValue("test.doc") 将导致层次结构的每一层对输入运行某些验证测试。这些从底部开始向上移动。沿途还会触发各种事件。如果有意义的话,该值实际上“存储”在层次结构的底部。

由于我真正所做的只是定义了一个严格的类型层次结构,是否存在推荐的方法来执行以下任一操作:

  1. 将此 C# 代码转换为“平面”高性能等效代码? (运行时或编译时)
  2. 或者,也许更好的是,构造一个 DSL,它只会吐出等效的类型/对象列表?

总体目标有两个:拥有特定于我的应用程序问题域的强类型,提供一个干净的地方来放置我的验证规则。

谁能提供一些提示/建议?我做错了吗?

谢谢

最佳答案

我的第一直觉是质疑您如何知道这是性能下降的原因。你跑过探查器吗?

我的第二个问题是要一个代码示例。这种分层是否通过 OOP(继承)反射(reflect)出来?

据我了解,您使用不同的类型来表示不同的关注点——这很好。您已经构建了类似 ViewModel/Model/DataModel 的东西,这是非常标准的。


鉴于您的评论,我建议您下载 ANTS Performance Profiler 的试用版并使用它来分析缓慢的实现;它会准确地告诉您哪些方法花费的时间最长,并让您量化变化的结果。

除非应用程序非常简单,否则我不建议立即拆开您的分层方法。学习如何干净利落地实现分层系统可以让您以后保持理智。

关于c# - C# 中 DSL/自定义类型的工具包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4442213/

相关文章:

java - 使用 'super' 关键字绑定(bind)泛型

c# - 如何在循环中使用 UdpClient.BeginReceive

c# - 是否可以使用没有类型参数的泛型类?

c# - 在 C# 中使用 Uploadify

C# ListView Detail,高亮单个单元格

.net - 实现领域驱动设计的功能方式

c# - 基本聚合问题

domain-driven-design - 聚合根 : State Change or fail with Exception or . ..?

r - R 是否有像 python 中那样的断言语句?

c++ - 在子类型上调用函数是如何实现的?