在架构中使用扩展方法
Using extension methods in architecture
性能、内存、安全等方面有没有问题?在使用扩展方法?
并且我想在我的架构中大量使用扩展方法,
创建一个函数层(在 F# 中处理数据),主要应用层(在 C# 中)将使用 F# 扩展方法将在 context.doSomething();
等 dbcontext 实例上调用,顺便说一句不要实例化服务(类)当想使用它们而不是将它们用作扩展方法
重要吗?
一种扩展方法
var newString = myString.DoSomething();
只是语法糖
var myString = StringHelper.DoSomething(myString);
因此,请像对待任何其他 static
方法一样对待扩展方法。性能、安全性、内存使用都应该完全相同。
Is there any problem with
让我们看看....
performance
不,这是静态方法调用的语法糖。没有区别。
memory
我说的是静态方法调用吗,带有 this 指针。没有区别。
security
使用 this 指针的静态方法调用。没有不同。适用标准安全性。
这就是说...
etc
扩展方法可能存在几个问题。
首先,您必然会使用数百种扩展方法来重载 DbContext。这失去了实际进行某种逻辑分组的能力。人们会感到困惑,甚至可能对特定方法的来源感到困惑。
其次,你成功地破坏了继承和依赖注入的使用。扩展方法本质上是静态方法,不能抽象和重写,实例上没有构造函数调用依赖注入。
作为架构的基础,我会非常小心 - 你可能会成功破坏构成良好架构的所有内容。显然,这取决于确切的用例。
性能、内存、安全等方面有没有问题?在使用扩展方法?
并且我想在我的架构中大量使用扩展方法,
创建一个函数层(在 F# 中处理数据),主要应用层(在 C# 中)将使用 F# 扩展方法将在 context.doSomething();
等 dbcontext 实例上调用,顺便说一句不要实例化服务(类)当想使用它们而不是将它们用作扩展方法
重要吗?
一种扩展方法
var newString = myString.DoSomething();
只是语法糖
var myString = StringHelper.DoSomething(myString);
因此,请像对待任何其他 static
方法一样对待扩展方法。性能、安全性、内存使用都应该完全相同。
Is there any problem with
让我们看看....
performance
不,这是静态方法调用的语法糖。没有区别。
memory
我说的是静态方法调用吗,带有 this 指针。没有区别。
security
使用 this 指针的静态方法调用。没有不同。适用标准安全性。
这就是说...
etc
扩展方法可能存在几个问题。
首先,您必然会使用数百种扩展方法来重载 DbContext。这失去了实际进行某种逻辑分组的能力。人们会感到困惑,甚至可能对特定方法的来源感到困惑。
其次,你成功地破坏了继承和依赖注入的使用。扩展方法本质上是静态方法,不能抽象和重写,实例上没有构造函数调用依赖注入。
作为架构的基础,我会非常小心 - 你可能会成功破坏构成良好架构的所有内容。显然,这取决于确切的用例。