代码之家  ›  专栏  ›  技术社区  ›  Yossi Kreinin

面向对象设计问题-链接到前体

  •  0
  • Yossi Kreinin  · 技术社区  · 7 年前

    我正在写一个程序来搜索并导出输出。
    我有三个主要目标:

    • 要求
    • 输出量

    这些物体中的每一个都与它的前身有关。

    即: 输出输出->搜索结果->要求

    澄清:

    以后的进程确实会在前体对象上使用属性和方法。

    即:

    SendEmail(output.SearchResults.Request.UserEmail, BODY, SUBJECT);
    

    这甚至对我来说都有味道。我能想到的唯一解决办法是在每个层中都有隐藏属性,这样我只能访问一个层

    MailAddress UserEmail
    {
      get { return SearchResults.UserEmail; }
    }
    

    哪一个是可以的

    SendEmail(output.UserEmail, BODY, SUBJECT);
    

    但同样,这只是隐藏了问题。 我可以将前体对象中的所有内容复制到它们的后续对象中,但这会使输出变得非常丑陋。它们是考虑这些对象的更好方法。

    SearchResults实现IDisposable,因为它链接到非托管资源(临时文件),所以我真的不想在ExportOutput中复制它。

    2 回复  |  直到 17 年前
        1
  •  2
  •   SingleShot    17 年前

    如果A直接使用B,则不能:

    • 重用A而不重用B
    • 在不破坏A的情况下改变B

    如果您设计/编程为接口,您可以:

    • 重用A而不重用B—您只需要提供实现与B相同接口的东西
    • 单独测试A和B-您只需要替换一个模拟对象。
    • 在不破坏A的情况下更改B-因为A依赖于接口-而不是B

    Dependency Inversion Principle (PDF文件)。

        2
  •  0
  •   anon    17 年前

    推荐文章