【问题标题】:How does one implement UI independent applications?如何实现独立于 UI 的应用程序?
【发布时间】:2010-12-21 19:05:11
【问题描述】:

使我的大部分 C# 源代码 UI 独立的基本技术是什么?

例如,我想为 Winforms 桌面应用程序编写我的源代码,我将能够插入到 asp.net Web 应用程序或 WPF 应用程序中,只需进行非常小的更改。 IE。无论 UI 技术如何,我都将能够使用相同的源代码,以使其面向未来。

我知道CSLA framework 可以做到这一点。

但是如果我不使用CSLA(学习一个新框架需要一些时间,目前我没有那么多时间花在它上面),要实现这种我的 C# 代码中的能力?

你能举个例子吗?我已经在我的应用程序中使用了业务对象和分层技术。但即便如此,我也看到需要大量编码才能将我的代码插入新的 UI 技术。

请不要给我任何肤浅的答案。

【问题讨论】:

    标签: c# model-view-controller design-patterns


    【解决方案1】:

    进行独立于 UI 的编码的最佳方法是将逻辑与表示分离。看看MVC pattern.

    这更多是您设计的纪律问题,而不是框架问题。框架不能不强迫您正确设计。如果您正确设计应用程序,它可以让您的事情变得更轻松,但总有办法绕过它。

    【讨论】:

    • 你能举个例子吗?我已经在我的应用程序中使用了 BO 和分层技术。但即便如此,我也看到需要大量编码才能将我的代码插入新的 UI 技术。
    • BO?你这是什么意思?
    • @Steven - “Business Objects” - 但这纯粹是在黑暗中刺伤
    • 业务对象。那是来自 DB 的 table-shadow 类。
    • 在模型视图控制器模式中,实体(在您的情况下为 db 阴影类)是模型。模型只对数据的内容负责。控制器只负责实现模型和视图之间发生的逻辑。视图只负责显示一个界面并发送请求一个动作的消息。控制器处理动作请求并执行所需的动作。
    【解决方案2】:

    要使您的代码 UI 独立,请将不依赖于 UI 的逻辑放入单独的层或程序集中。将逻辑与表示分离。这就是 MVC、MVP 和 MVVM 等所有模式所遵循的。它是软件结构的基本组成部分,应该根深蒂固;如果不是,那就这样吧。

    将逻辑与演示分开。学习它。活下去。喜欢它。

    编辑:

    你能举个例子吗?我已经在我的应用程序中使用了 BO 和分层技术。但即便如此,我也看到需要大量编码才能将我的代码插入新的 UI 技术。

    请不要给我任何肤浅的答案。

    我看到你已经编辑了。请允许我详细说明:

    一些依赖于 UI 的逻辑是不可避免的。 UI 不是外壳;它们仍然具有逻辑和功能。但该功能应该只针对用户交互。显示数据。收集资料。花哨的图形技巧和动画,如果您的偏好在那个方向。

    剩下的交给业务层,那些的东西可以被重用。如果分层正确,则可以避免每次为新的 UI 框架编写程序时都必须重写核心功能。

    但是你仍然需要重写 UI 的东西。

    【讨论】:

    • +1。作为一般规则,您永远不必在业务层中导入 System.Web 或在 UI 层中输入 System.Data
    • @Chetan Sastry:我同意 90%。对于System.Web,我完全同意。而System.Data 包含DataSetDataTable,两者都在UI 层的数据绑定中非常常用。我个人更喜欢并推荐使用 POCO 将数据传递到 UI 层,但现实情况是仍有不少人仍在使用这两个类。但是,对于命名空间中的所有其他内容,我同意。
    【解决方案3】:

    如果您正在构建一个多层应用程序,您的业务逻辑、数据访问等应该已经被分成完全独立于您的 UI 的类。将这些库重新用于不同的目标平台(桌面与 Web 等)应该是从新应用程序中引用现有库的简单问题。

    这是软件开发的基本规则。尽管像 MVC 等模式和框架更严格地执行这一点,但最终是否正确设计应用程序取决于您。这类任务不需要学习新技术——只需常识和一点点经验即可。

    【讨论】:

    • 我已经在我的应用程序中使用了 BO 和分层技术。但即便如此,我也看到需要大量编码才能将我的代码插入新的 UI 技术。
    • “新编码”应该仅限于特定于 UI 的行为。如果不是,您应该重新检查您的 BO 和 DAL。
    【解决方案4】:

    查看 Martin Fowler 关于此主题的出色文章。

    GUI Architectures, Including MVC, MVP, MVPC

    【讨论】:

      【解决方案5】:

      在 MSDN Magazine 上查看 MVVM(Model-View-ViewModel) 的解释。 MVVM 广泛用于 WPF 应用程序开发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 2011-02-12
        • 1970-01-01
        相关资源
        最近更新 更多