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

Geo*_*own 6 oop soa

我们的架构师已经谈到在整个代码库中使用SOA技术,甚至在实际上不作为服务托管的接口上也是如此.他的一个要求是我们设计我们的接口方法,以便我们不对实际的实现做出任何假设.因此,如果我们有一个接受对象并需要更新该对象的属性的方法,我们显然需要从该方法返回该对象.否则,我们将依赖于Something是引用类型的事实,并且c#允许我们默认更新引用类型的属性.

所以:

public void SaveSomething(Something something)
{
  //save to database

  something.SomethingID = 42;
}
Run Code Online (Sandbox Code Playgroud)

变为:

public Something SaveSomething(Something something)
{
  //save to database

  return new Something
  {
    //all properties here including new primary key from db
  };
}
Run Code Online (Sandbox Code Playgroud)

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

这是一种常见的方法吗?

Aud*_*die 1

我认为你的架构师正在努力让你的代码产生更少的副作用。在您的具体示例中,没有任何好处。在很多很多情况下,您的架构师是对的,您可以设计应用程序的大部分而不会产生副作用,但这种情况不能发生的地方是在对数据库进行操作期间。

您需要做的是熟悉函数式编程,并准备与架构师就此类案例进行对话。请记住,他/她的意图很可能是好的,但具体情况是您的职责范围。在这种情况下,副作用是 point,您很可能希望返回 bool 类型来指示成功,但返回新类型没有意义。

向您的架构师表明您了解限制副作用,但必须允许某些副作用(数据库、UI、网络访问等),您可能会发现他或她同意您的观点。找到一种方法来隔离所需的副作用并向他或她明确说明,这将对您的情况有所帮助。如果您本着合作精神(而不是试图在他或她的计划中找出漏洞)来这样做,您的建筑师可能会很感激。

FP 的一些资源:

  1. 函数式编程的精彩教程
  2. 维基百科关于函数式编程的条目

祝你好运,我希望这会有所帮助。