规范模式和性能

本文关键字:性能 模式 范模式 | 更新日期: 2023-09-27 18:00:27

我一直在讨论如何在我们的c#/mvc应用程序中处理和包含业务逻辑的规范模式。到目前为止还不错。不过,我确实有一个问题——由于我们将在堆上创建许多规范对象,与创建辅助方法来处理业务逻辑相比,这会以任何方式影响性能吗?谢谢

规范模式和性能

不过,我确实有一个问题——由于我们将在堆上创建许多规范对象,与创建辅助方法来处理业务逻辑相比,这会以任何方式影响性能吗?

当然,它会影响性能,您编写的每一行代码和所做的设计选择都会以某种方式影响性能。这一点不太可能有意义,不太可能成为应用程序中的瓶颈,也不太可能值得关注,因为这几乎肯定是过早优化的情况。现在,您应该专注于正确地建模您的域,并编写非常清晰和可维护的代码。更多地关注开发人员的生产力,而不是机器的生产力。CPU周期很便宜,而且供应量几乎是无限的。开发周期并不便宜,供应量也不是无限的。

但只有您才能通过分析来知道它是否会影响应用程序在现实世界中对真实世界数据的使用。我们不知道,也不可能知道,因为我们不了解您的域,不了解您用户,不知道您期望的性能,等等。即使我们知道这些,我们仍然无法通过从货架上掸掉探查器的灰尘,看看您的应用程序实际做了什么,为您提供强大的答案。

由于我们将在堆上创建许多规范对象,这会以任何方式影响的性能吗

大多数设计模式都会为了设计的清洁度而牺牲一些开销——这也不例外。一般来说,规范添加的内存量非常少(通常是几个引用,仅此而已)。此外,相对于自定义逻辑,他们倾向于添加几个额外的方法调用。

话虽如此,我不会试图过早地对此进行优化。这里的开销非常小,所以我非常怀疑它在任何现实世界的应用程序中都会引人注目。

如果您使用NSpecifications lib作为其GitHub页面中的示例,您将从两个方面获得好处:

  • 这些规范中的大多数都简单地存储在静态成员中,因此它不会从堆中获得太多

  • 这些规范还使用已编译的表达式,以便它们可以多次重复使用,并具有更好的性能

  • 如果您使用ORM用lambda表达式查询数据库,也使用堆,那么这里的区别在于NSpecifications将这些表达式存储在Spec对象中,这样它就可以在业务loginc和查询中重用。

查看此处

https://github.com/jnicolau/NSpecifications