Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 处理API限制的最佳方法是什么?_Language Agnostic_Api_Refactoring - Fatal编程技术网

Language agnostic 处理API限制的最佳方法是什么?

Language agnostic 处理API限制的最佳方法是什么?,language-agnostic,api,refactoring,Language Agnostic,Api,Refactoring,到目前为止,我们的核心领域有一个名为PersonName的抽象概念,其中包含firstName、lastName、middleInitial等方法。当我们将该领域扩展到西班牙时,我们发现他们只谈论名字、first姓氏和second姓氏,即middleInitial等,对他们来说没有任何意义 PersonName接口目前在当前API的许多地方使用,SpainPersonName也应该在相同的地方使用。因此,我的选择是从PersonName扩展SpainPersonName。但是,如果我这样做,那么

到目前为止,我们的核心领域有一个名为PersonName的抽象概念,其中包含firstName、lastName、middleInitial等方法。当我们将该领域扩展到西班牙时,我们发现他们只谈论名字、first姓氏和second姓氏,即middleInitial等,对他们来说没有任何意义

PersonName接口目前在当前API的许多地方使用,SpainPersonName也应该在相同的地方使用。因此,我的选择是从PersonName扩展SpainPersonName。但是,如果我这样做,那么我将最终公开firstName、middleInitial等API,这些API不适用于西班牙域


我的问题是如何最好地重构当前的抽象,同时保持向后兼容性?非常感谢您提出的任何重构或设计建议。

我不太确定您的问题是什么。“从PersonName扩展SpainPersonName”是指让SpainPersonName实现还是从PersonName继承

无论如何,让我推测人名抽象可能是有缺陷的。抽象必须广泛适用,至少适用于应用它的情况,对吗?正如你所指出的那样,我们西班牙人不会从名字和姓氏的角度思考问题。也许这个抽象需要重新思考。根据我的经验,基于GivenName+FamilyName的抽象是最广泛适用的,即使是在名称顺序不是“通常”顺序的亚洲文化中也是如此


出于建设性的考虑,我认为您需要将西班牙人的第一和第二姓氏映射到抽象的姓氏,因为(第一和第二姓氏)就是我们西班牙人所认为的“姓氏”。如果你能做到这一点,那么你做得可以接受。

听起来你需要将PersonName更改为AngloPersonName并创建PersonName界面?

Pangea-这是在演示(viewmodel)级别,还是在谈论DAL映射对象。我在想象viewmodel,但只是想确定一下。这是我们的核心业务领域,而不是view Layers SpainPersonName扩展PersonName。我知道抽象被破坏了,但是现在改变它已经太迟了,因为我们的客户已经在使用现有的API了。我的问题是,我们如何才能最好地重构当前的抽象,仍然保持向后兼容性?好吧,重构某些东西意味着改变它!如果您无法更改PersonName,则无法重构它。你被卡住了。您唯一能做的就是按原样使用它,并专注于SpainPersonName实现。这就是你打算做的吗?是的。我现在还在坚持。因此,为了与DOAMINAPI的其余部分配合使用,我的SpainPersonName应该从PersonName扩展而来。那么,我是否应该只添加新方法,比如getFirstNames()、getSecondNames()(普适语言),并从与西班牙域无关的方法(比如getMiddleInitial())中抛出UnsupportedOperationException?还有,什么是表示名称抽象的理想方式?就像你说的吉文名字和家庭名字。你能给我一些参考文档吗?关于你的第一个问题:我会像你建议的那样为第一个和第二个姓氏添加方法,然后为不受支持的方法抛出异常,或者更好的是,返回一个空字符串。毕竟,我认为,表示没有中间首字母的人的对象应该为该属性返回一个空字符串。然而,我确实认为中间的首字母对西班牙语名字有意义。也许它们不像在美国那么常见,但在西班牙确实存在中间名;我很抱歉。这(GivenName加FamilyName)是我多年来一直用于全局应用的结构,效果良好。根据区域设置/文化,您可以对其进行适当的格式化。例如,SpanishName可以实现GivenName、FirstFamilyName和SecondFamilyName,并将FamilyName映射到FirstFamilyName+“”+SecondFamilyName。对于大多数情况,都有一个简单的映射。