【问题标题】:OOD - passing data to model (MVC)OOD - 将数据传递给模型 (MVC)
【发布时间】:2015-07-23 06:28:38
【问题描述】:

我想将表单传递给我制作的模型 (MVC) 在OOD原则和松耦合方面,首选什么态度?

1) 将新用户的所有详细信息从表单(用户名、密码、电话等)传递到模型到单个或重载方法? 或:

2) 将单个对象(例如“User”或“ParseUser”(解析云服务的对象 - parse.com))传递给模型。

优点和缺点: 如果我通过 ParseUser 对象,明天 parse.com 可以更改该对象,我将不得不更改所有“客户端”(=调用者)的代码,而不仅仅是从模型中更改它们。 而如果我将细节传递给重载方法(例如 (signUpUser("Dave","abc234",+834-000-000-00)) 我认为这也与松散耦合原则相矛盾,因为有更多数据(多个变量)在实体之间传递,看起来比较乱……

【问题讨论】:

    标签: java android oop parse-platform loose-coupling


    【解决方案1】:

    我建议你使用第二种方法

    将单个对象(例如“User”或“ParseUser”(解析云服务的对象 - parse.com))传递给模型。传递带有属性的单个对象可以节省大量代码。无论如何,如果第三方修改了它的对象,你无论如何都必须在这两种情况下重构你的代码。

    如果我通过 ParseUser 对象,明天 parse.com 可以更改 对象,我将不得不从所有 "clients"(=callers) 而不是仅仅从模型中更改它们。

    如果 ParseUser 对象正在将属性“时间”传递给您的应用程序,则您将其添加到您的模型中并由 n 个客户端访问。将来 parse.com 会弃用该属性,无论您将每个属性单独添加到模型中还是直接将单个对象添加到模型中,您都必须在两种场景中重构代码。您必须更改模型中的代码。

    传递单个对象更简洁并减少代码。

    您可以编写一个wrapper class 来访问 parse.com API,这将为您的应用程序提供抽象。

    【讨论】:

    • 感谢您的回答,但我认为我必须澄清一点误解,您必须考虑它:如果我将它作为多个变量传递并且 parse.com 不推荐使用 time 属性,我不需要更改所有n个客户端中的代码,因为我只需更改模型中将忽略时间的方法即可。而在第二种方法中,我必须更改所有客户端,因为没有更多这样的属性 ParseUser.time 并且尝试更改它会导致错误。
    • 假设其类中的客户端“A”现在正在使用 yourMethod() 提供的时间,如果您更改方法并停止发送时间,它不会破坏客户端的代码。因为它已经在期待你的时间场了?无论您将单个字段添加到模型还是单个对象,这种情况都是相同的。您必须更改您的 API 并通知客户端该字段已被弃用。它与您如何将属性添加到模型无关。还可以查看构建器模式。它根据输入参数构造对象。
    • 您提到的有关包装器和构建器的内容似乎对我的情况很有用,我会读到这一点。但是,我确实想解释为什么使用方法/重载方法不需要对客户端代码进行任何更新。假设客户端首先看起来像这样:
       MyParseModel.createNewUser(username,password,age,time); 
      和模型代码(服务器)是:
       public static void createNewUser(){<br> ParseUser pu = new ParseUser; pu.username=用户名; pu.password=密码; pu.age=年龄; pu.time=time // 你只需要删除这一行! } 
    • @Amitay 你不明白这一点,说你的 API 中有这段代码,你在上面的声明中提供了我正在使用你的 API 并且在我的代码中的 n 个地方使用这个属性时间.现在您已经从新方法中删除了 time 属性。我是否还必须从我的代码中删除 time 属性?什么会取代时间?它会破坏我的代码。
    • 我想如果我发布一个 API 那就是另一回事了,但现在我只使用 Parse 的 API,我正在谈论他们将对他们的对象 ParseUser 所做的更改。今天 ParseUser 有一个 email 属性,明天可能会弃用它,所以即使用户输入他的电子邮件,如果我只删除 ParseUser.email=email 行,一切都会好的
    猜你喜欢
    • 2023-04-05
    • 2014-09-14
    • 1970-01-01
    • 2012-09-30
    • 2020-01-09
    • 2018-02-18
    • 2020-11-02
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多