gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:02:41 25 4
gpt4 key购买 nike

我们的架构师已经谈到在我们的代码库中使用 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 FunctionalProgramming
  • Wikipedia's entry on Functional programming

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

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com