假设我有一个User类,我想返回数据库中的所有用户。为此我创建了一个名为getAll();
的方法我需要在应用程序的不同部分调用该方法,并以不同的格式返回数据。我可能需要用逗号分隔的所有用户放入一些“where in”条件,或者用json格式制作api,或者作为数组,例如。
什么是组织我的代码的最佳解决方案?
可能的解决方案: 1.将fetchMode变量传递给getAll函数,以便我可以相应地格式化返回值。 2.创建一个代理方法“findAllAsArray”,“findAllAsJson”等,它调用原始的getAll方法并格式化响应。 3. Allways以标准格式(例如:array)返回结果,然后创建一些通用方法来转换格式:ex:arrayToJson,arrayToCsv等,当我需要其他格式的结果时使用它们。
如果我需要许多格式,方法1可能会使getAll方法过于复杂。 方法2可能会添加太多额外的方法,使我的类更复杂。 方法3,不确定,但数据应该从我认为的模型返回所需的格式。在控制器中转换它可能不是最好的解决方案。
答案 0 :(得分:0)
创建一个新类,例如“用户”,其中包含原始数据。用户是不可变的:一旦初始化,其状态永远不会改变。现在让getAll()返回一个Users实例,用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