2015-09-27 40 views
-1

我有一个关于课程设计的问题,我一直在研究一个项目。更准确地说,我将解释这种情况,如果其方法正确或者不正确,将需要反馈。这是设计课程的正确方法吗?

我们有一个验证类,用于在持久化之前验证用户输入的业务数据,例如我有一个验证方法来检查用户名是否以空白开头,另一个方法验证特定类型的用户应该提供地址,就像我们有几种验证方法一样,随着项目的发展,我们将会有更多这样的验证。这些验证方法在服务类中用公共接口方法声明为私有,只有在用户单击保存时才会调用所有这些私有方法。现在这里的问题是,当为第n个验证方法编写junit时,我必须遍历所有以前的验证准备测试数据,因为它们有一个公共的公共接口。此外,如果任何其他验证的逻辑发生变化,我的联合可能会失败。如果不公开这些方法,我建议我的同事拥有软件包或受保护的可见性,但他们表示只是为了单元测试而改变可见性并不正确。

此外,我发现了另一种使用反射访问私有成员的解决方案,但它似乎更多的是黑客攻击,并不推荐按照堆栈溢出中给出的某些答案。所以现在我开始思考如果这是一种设计气味,将来我们可能需要在项目的其他部分进行一些验证,然后必须将其公开化。但在提出这种改变之前,我不确定这一点,因此我认为最好找一些专家就此提出意见。

您能否告诉我们这是否是一个设计问题,我们应该将这些方法作为公开使用,这不是一个设计问题,那么应该如何处理这个问题呢?

+0

这是提问的不好方法。还提供了你得到的实际设计,这将更多的可读性,然后这个文本。 – YoungHobbit

+0

我想回答这个问题,然后看到这个混乱。我甚至不想读它。这不是构建问题的正确方法。对不起。 –

+0

从'private'改变可视性对于单元测试来说默认是完全可以接受的,事实上,在上述情况下可能是最好的解决方案。反射和脆弱测试都是更差的结果。 –

回答

0

我认为你应该将通用的验证逻辑提取到一个单独的类中并测试这个类。您的具体验证类应该只包含或多或少的声明性语法规则。例如,检查how validation is handled in such frameworks as Laravel。你有套房吗?

+0

感谢您的回答。现在我已经按照上面的建议将这些方法声明为package private。 –

相关问题