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

标签 oop soa

我们的架构师已经谈到在我们的代码库中使用 SOA 技术,甚至在实际上并未作为服务托管的接口(interface)上也是如此。他的要求之一是我们设计我们的接口(interface)方法,以便我们对实际实现不做任何假设。因此,如果我们有一个接收对象的方法并需要更新该对象的属性,我们明确需要从该方法中返回该对象。否则我们将依赖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
  };
}

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

这是一种常见的方法吗?

最佳答案

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

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

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

FP的几个资源:

  • A great tutorial on Functional Programming
  • Wikipedia's entry on Functional programming

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

    关于oop - 在非服务代码中使用 SOA 原则而不是 OOD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622172/

    相关文章:

    architecture - 微服务架构——跨域聊天

    WCF-域对象和IExtensibleDataObject

    microservices - 在微服务架构中,一个针对公共(public)特性的服务应该是公共(public)的还是不公共(public)的

    java - 客户端服务器通信 - Java 服务器

    web-services - 在 SOA 架构中从另一个服务调用服务是否可以?

    javascript - 以下代码模式是否有标准名称?

    javascript - 如何从对象数组 javascript 创建特定对象?

    java - 如何知道我的手指在哪里、在哪个布局上?

    javascript - 带私有(private)/公共(public)的单例对象 : Public function dependency problems

    对象的 Javascript 浅拷贝未定义?