我们的架构师已经谈到在整个代码库中使用SOA技术,甚至在实际上不作为服务托管的接口上也是如此。他的一个要求是我们设计我们的接口方法,以便我们不对实际的实现做出任何假设。因此,如果我们有一个接受对象并需要更新该对象的属性的方法,我们显然需要从该方法返回该对象。否则,我们将依赖于Something是引用类型的事实,并且c#允许我们默认更新引用类型的属性。
所以:
public void SaveSomething(Something something)
{
//save to database
something.SomethingID = 42;
}
变为:
public Something SaveSomething(Something something)
{
//save to database
return new Something
{
//all properties here including new primary key from db
};
}
我无法真正理解这种方法带来的好处,并且想知道是否有人可以提供帮助?
这是一种常见方法吗?
答案 0 :(得分:1)
我认为您的架构师正试图让您的代码减少副作用。在您的具体示例中,没有任何好处。在许多情况下,您的架构师是正确的,并且您可以设计应用程序的大部分而没有副作用,但是在针对数据库的操作期间不会发生这种情况。
您需要做的是熟悉函数式编程,并与您的架构师一起准备与这些案例的对话。记住他/她的意图很可能是好的,但具体的情况是你的域名。在这种情况下,副作用是点,你很可能想要一个返回类型的bool来表示成功,但返回一个新类型是没有意义的。
向您的建筑师展示您理解限制副作用,但必须允许某些副作用(数据库,UI,网络访问等),您可能会发现他或她同意您的意见。找到一种方法来隔离所需的副作用,并让他们清楚,这将有助于你的情况。如果你本着合作的精神(不是试图在他或她的计划中发现漏洞)这样做,你的建筑师可能会很感激。
FP的几个资源: