开发者

same method, multiple return types. code organization

开发者 https://www.devze.com 2023-04-08 17:09 出处:网络
Let´s say I a have an User class and I want to return all the users in my database. For that i have create a method called getAll();

Let´s say I a have an User class and I want to return all the users in my database. For that i have create a method called getAll();

I need to call the method in different parts of my application and return the data in different formats. I might need all users separated by commas to put in some "where in" condition, or in json format to make an api, or as array, for example.

Whats is the best solution to organize my code?

Possible solutions: 1.Pass a fetchMode variable to the getAll function so i can format the return value accordingly. 2. Create a proxy method "findAllAsArray", "findAllAsJson" etc, which calls the the original getAll method and formats the response. 3. Allways return the result in a standard format (ex: array) and then create some generic methods to convert between fo开发者_如何学Pythonrmats: ex: arrayToJson, arrayToCsv, etc and use them when I need the results in other format than the standard.

The method 1 might make the getAll method too complex, if i have many formats needed. The method 2,might adding too many extra methods making my class more complex. The method 3, not sure but the data should be returned in the needed format from the model i think. Converting it in the controller, it´s probably not the best solution.


Create a new class, e.g. "Users," which contains the raw data. Users is immutable: Once initialized, its state never changes. Now have getAll() return an instance of Users, initialized with the raw data that getAll() created. Result has, for each format, a public method which formats the raw data appropriately and returns it.

In pseudo code:

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

To retrieve all users in json format:

users.getAll.json

To retrieve all users in csv format:

users.getAll.csv
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号