gpt4 book ai didi

c# - 库应该公开辅助类吗?

转载 作者:行者123 更新时间:2023-11-30 22:13:26 25 4
gpt4 key购买 nike

我们正在设计一个仅供内部使用的库,它将作为几个即将推出的应用程序的核心业务对象模型。它主要涵盖各种类型的客户和各种类型的文件。

显然,如果您要使用这些对象,尤其是如果您要序列化它们,我们希望确保它们具有有效、合理的值。

例如,客户有联系信息,其中包括电话号码。所以有一个 ITelephoneNumber 接口(interface)、基类、一个 US 实现,所有这些。该库使用这些类来验证其数据。

但实际上,Customer 对我们来说更像是一个“核心”业务对象,而 PhoneNumber 则不那么重要;为电话号码编写一堆结构并将其公开为 Our-Library-Goodness 感觉有点奇怪。它们似乎有点“超出范围”。

电话号码就是一个例子;还有其他事情。我们可以将这些类结构重构为静态方法,但我们有冗长的构造函数,它们必须“只知道”使用这些方法等。我们决定在很多方面使用类。

我的问题是

消费者是否应该使用这些并非真正需要定义核心对象的辅助类?如:

MyCustomer.SetTelephoneNumber(new USTelephoneNumber("555", "555", "5555%$&"));
它为您提供编译时反馈、它们自己的成员(AreaCode、Exchange...)等等。

或者我们是否应该将获取有效电话号码的方法留给实现,并对其进行更多的“黑匣子”处理?如:

MyCustomer.SetTelephoneNumber("555-555-5555%$&");
这只会抛出一个错误或默默地失败/成功或返回一个 string.Empty 或其他任何东西。


我不知道这个问题是否可以“回答”,我也不想发动任何圣战。无论哪种方式,我都在寻找一些推理。我们只是一个 2 人团队,试图在一个不太关心代码质量或可维护性的机构中做正确的事。

最佳答案

这个问题的关键在于您声明它是一个“仅供内部使用的库”。这意味着完全由内部开发团队决定库的实现方式。为了做出这些决定,我会考虑两种实现可能性的值(value)。

更复杂的实现是否为您节省了后期开发的时间和精力?

更复杂的实现是否会阻止您在使用该库时一遍又一遍地编写验证代码?

这些问题可以帮助您确定复杂的实现是否有值(value)。如果从长远来看,预先编码可以节省您的时间,那么这是值得的。如果预先编码在可预见的 future 不会节省时间和精力,那么就不值得付出努力。

关于c# - 库应该公开辅助类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160381/

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