首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物体健美操的规则9在现实生活中真的可行吗?

物体健美操的规则9在现实生活中真的可行吗?
EN

Software Engineering用户
提问于 2017-10-02 17:23:34
回答 1查看 1.6K关注 0票数 6

我最近读到了关于对象健美操的文章,我被规则9困住了。

我对代码的典型方法(我是C# .NET开发人员)是将数据建模为仅用于表示数据模式的波科类。这不可避免地意味着一组使用getter和setter公开的属性。这些类实现的方法很少,或者更多的是否定的。它们是哑对象,通常存在于我的解决方案体系结构中的一个较低的级别。它们有一个独特的责任:对结构化数据(例如数据库表行)建模。

在需要逻辑功能的地方,我将在业务(或服务)层中引入这些专用服务类。这些类还通过处理特定的业务需求来遵守单一责任原则。例如,我可能有一个Customer类,以及一个负责读取和写入持久数据存储的CustomerRepository类。这个CustomerRepository将实现一个IRepository契约,以确保我可以将它作为一个依赖项注入,并在测试中模拟它。

使用此模式,不可避免地,我的Customer必须通过getter和setter公开其属性("直接朝你的脸上吐出自己的内脏"!)以便存储库可以将其映射到数据库表或其他任何地方。

所以我的问题是,为什么一个对象健美操爱好者会认为这是如此错误?在我所看到的所有示例中,作者将属性保持为私有,并将逻辑函数直接引入到类中,在我看来,这些函数打破了单个责任,并可能导致大量的、笨重的、不可测试的类。

那么,规则9在现实生活中真的可行吗?在我发现的为数不多的详细解释之一中,作者似乎反对自己,定义了一个Account类,将Balance设置为私有,然后引入了像Withdraw这样的方法,不仅封装了属性,还封装了与该属性一起工作的任何逻辑。好吧,但是如果业务需求需要程序员将帐户余额写到UI中呢?在这种情况下,如何遵守规则第9条?

EN

回答 1

Software Engineering用户

发布于 2017-10-02 17:42:00

从您提供的链接中:

在这种情况下,您可以保留getScore(),因为您可能希望在UI的某个位置显示它,但请记住,不应该允许设置器。

因此,在您的示例中,帐户余额将显示在UI上,getBalance()将适合保留。

考虑到您当前编写POCO类的模型,您可能无法调和这两者。您可能需要修改您的设计,以适应缺乏设置。或者,只要意识到规则9的精神是什么,那就是防止任何物体破坏你的目标。考虑到您的类只存在于映射来自DB的信息,这似乎是一个无关紧要的问题。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/358468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档