0

这是一个比较理论的问题。我正在构建一个 MVC 数据驱动的应用程序。我的问题是将数据从数据库字段转换为可显示的数据。例如,我想将布尔值 1 或 0 转换为字符串“是”或“否”。我想将 firstName 字段和 lastName 字段转换为“FullName”字段。(即:“John”和“Smith”变为“Smith, John”)。我想将包含 user_id 的字段转换为指向详细信息页面的超链接. (即,将 17 的 user_id 转换为包含:userdetails.php?id=17 的链接)

我知道我可以在 SQL 查询中做到这一点。(SELECT CONCAT(lastName .", " .firstName) AS fullName)。我知道我可以为我需要的每种类型的列表编写一个对象,并在所述对象中手动进行转换。我知道我什至可以在视图级别使用助手来完成其中的一些操作。

但我在想的是一种类似于“数据转换对象”的东西。它将在构造函数中使用一组记录。然后它将有一个“转换对象”分配给将转换数据的每个字段。然后它将有一种方法将转换后的数据作为数组获取。

为什么要做这一切?嗯,一个原因是因为它似乎是很酷的面向对象设计。另一个原因是我们可以使用纯形式的数据,但我们可以轻松地将其转换为可显示的格式。

伪代码如下:

class yesNoTransform extends dataTransform {

    public function ($field) {
        if($field == true) {
            return "TRUE";
        } else {
            return "FALSE"
        }
    }

    public function transform (
4

3 回答 3

1

看看装饰器模式。它符合您的要求。

于 2012-12-09T07:07:18.137 回答
0

If you can avoid code bloating, prefer that, this would mean prefer doing these small post-processig transformations right at SQL. Do more with less, less code to maintain, less bugs. If you absolutely must do the transformation in code, then I would actually recommend a "Filter"-based approach. You have filters that comply to a common abstraction and they process result sets saved in e.g. List of Map instances. You create a chain of filters, where each filter delegates to the next for processing and each applies a specific transformation to the result set. That's the Chain of Responsibility pattern.

于 2012-12-09T13:44:08.137 回答
0

会建议你使用 Java EE DAO 模式

通过这个,您可以抽象所有与数据库相关的东西。确保在 DAO 中处理所有 DB 异常,然后将响应转换为值对象或 DTO。所以你的 DAO 会将 DTO 对象返回给调用方法或控制器。

于 2012-12-09T07:11:50.780 回答