一个类Customers
实例化许多其他类(例如CustomersFromMysql
、CustomersFromPostgeSQL
),所有查询数据库都返回客户名称。现在,这些客户名称返回为例如 name = "John Doe"
,但我的 Customers
类需要的不仅仅是 name
,它还需要 nameNoSpace = "JohnDoe"
和 nameInvertedComma = "Doe, John"
。
我会编写一个辅助类Converter
,它具有invertName(name)
和removeComma(name)
等方法。我是否会在查询数据库的每个类(CustomersFromMysql
、CustomersFromPostgeSQL
)中实例化转换器以返回所有必需的变量,还是会在实例化类Customers
中实例化Converter
,以便当我返回结果时,我会迭代列表并批量转换它们?
当然两者都可以,但是该怎么做呢?
最佳答案
在这种情况下,您应该记住职责分离。与数据库相关的类应该只处理数据库特定的方面。对检索到的数据执行操作(计算)应视为业务逻辑。因此,如果您的 Customers
类中已经有一些逻辑,那么它将是放置转换例程的完美位置。尽管如此,这实际上取决于你认为你的逻辑属于哪里。
应用一些命名约定也可能有意义。一般来说,您至少可以区分不同类型的类,以防像您在问题中描述的那样:
- 数据访问对象(DAO);执行数据库操作(您的 SQL 类)
- 数据传输对象 (DTO) 或实体;代表您的业务对象的结构
- 业务逻辑;使用DAO检索DTO,根据您的要求执行一些逻辑,再次使用DAO将DTO推回数据库
关于java - 最佳实践 : String converting batch in instantiating class or capsulated in every instantiated class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718859/