2011-09-24 54 views
2

让我们说我有一个用户类,我想返回我的数据库中的所有用户。为此,我创建了一个名为getAll()的方法;同样的方法,多种返回类型。代码组织

我需要在应用程序的不同部分调用该方法,并以不同格式返回数据。例如,我可能需要以逗号分隔的所有用户放入一些“where in”条件,或以json格式放置api或数组。

什么是组织我的代码的最佳解决方案?

可能的解决方案: 1.为getAll函数传递一个fetchMode变量,以便我可以相应地设置返回值的格式。 2.创建一个代理方法“findAllAsArray”,“findAllAsJson”等,它调用原始的getAll方法并设置响应的格式。 3. Allways以标准格式(例如:array)返回结果,然后创建一些通用方法在格式之间进行转换:ex:arrayToJson,arrayToCsv等,并在需要除标准以外的其他格式的结果时使用它们。

如果我有很多需要的格式,方法1可能会使getAll方法太复杂。 方法2可能会添加太多的额外方法,导致我的类更复杂。 方法3,不知道,但应该从我认为的模型中以需要的格式返回数据。在控制器中转换它可能不是最好的解决方案。

+0

“控制器”。你是否在Ruby on Rails这样的框架中工作?我问,因为你的特定框架可能有内置的机制或惯例来处理这个问题。 –

回答

0

创建一个新类,例如包含原始数据的“用户”。用户是不可变的:一旦初始化,其状态不会改变。现在,getAll()返回一个用户实例,并使用getAll()创建的原始数据进行初始化。对于每种格式,结果都有一个公共方法,它可以适当地格式化原始数据并将其返回。

在伪代码:

class User: 
    method getAll: 
    users = # fetch the users 
    return Users.new(users) 

class Users 
    method initialize(users) 
    # Save users to a member variable 
    method json: 
    # Return users formatted as json 
    method csv: 
    # Return users formatted as csv 

要检索的所有用户JSON格式:

users.getAll.json 

要检索的所有用户以CSV格式:您提到

users.getAll.csv