在非服务代码中使用SOA原则而不是OOD

时间:2010-04-12 12:54:19

标签: oop soa

我们的架构师已经谈到在整个代码库中使用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
  };
}

我无法真正理解这种方法带来的好处,并且想知道是否有人可以提供帮助?

这是一种常见方法吗?

1 个答案:

答案 0 :(得分:1)

我认为您的架构师正试图让您的代码减少副作用。在您的具体示例中,没有任何好处。在许多情况下,您的架构师是正确的,并且您可以设计应用程序的大部分而没有副作用,但是在针对数据库的操作期间不会发生这种情况。

您需要做的是熟悉函数式编程,并与您的架构师一起准备与这些案例的对话。记住他/她的意图很可能是好的,但具体的情况是你的域名。在这种情况下,副作用是点,你很可能想要一个返回类型的bool来表示成功,但返回一个新类型是没有意义的。

向您的建筑师展示您理解限制副作用,但必须允许某些副作用(数据库,UI,网络访问等),您可能会发现他或她同意您的意见。找到一种方法来隔离所需的副作用,并让他们清楚,这将有助于你的情况。如果你本着合作的精神(不是试图在他或她的计划中发现漏洞)这样做,你的建筑师可能会很感激。

FP的几个资源:

  1. A great tutorial on Functional Programming
  2. Wikipedia's entry on Functional programming
  3. 祝你好运,我希望这会有所帮助。