C# 如何实现与用户界面无关的应用程序?

C# 如何实现与用户界面无关的应用程序?,c#,model-view-controller,design-patterns,C#,Model View Controller,Design Patterns,使大部分C#源代码UI独立的基本技术是什么 例如,我想为Winforms桌面应用程序编写源代码,只需稍作修改,即可将其插入asp.net web应用程序或WPF应用程序。也就是说,无论UI技术如何,我都能够使用相同的源代码,使其成为未来的证明 我知道你能做到 但是如果我不使用CSLA(学习一个新的框架需要一些时间,目前我没有那么多时间花在它上面),那么在我的C代码中实现这种能力需要注意哪些方面 你能给我举个例子吗?我已经在应用程序中使用了业务对象和分层技术。但即使如此,我也发现需要大量的编码才能

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

例如,我想为Winforms桌面应用程序编写源代码,只需稍作修改,即可将其插入asp.net web应用程序或WPF应用程序。也就是说,无论UI技术如何,我都能够使用相同的源代码,使其成为未来的证明

我知道你能做到

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


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


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

独立于用户界面编码的最佳方法是将逻辑与演示分离。看一看


这更像是设计中的规程问题,而不是框架问题。框架不能强迫您正确设计。如果你正确地设计应用程序,它可以让事情变得更容易,但是在实施过程中总是有办法的。

要使你的代码UI独立,将不依赖于UI的逻辑放在一个单独的层或程序集中。把逻辑和表现分开。MVC、MVP和MVVM等模式都遵循这一点。这是软件结构的一个基本部分,它应该根植于您的头脑中;如果不是,那就这么做吧

把逻辑和表现分开。学习它。活下去。我喜欢

编辑:


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

请不要给我任何肤浅的回答

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

无法摆脱某些依赖于UI的逻辑。UI不是一个外壳;它们仍然具有逻辑和功能。但这种功能应该只面向用户交互。显示数据。收集数据。如果你的喜好是朝这个方向的话,那就用些别致的图形技巧和动画吧

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


但是您仍然需要重写UI内容。

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


这是软件开发的基本规则。尽管MVC等模式和框架更严格地实施了这一点,但最终还是由您来正确设计应用程序。这类任务不需要学习新技术,只需要常识和一点点经验。

查看Martin Fowler关于这一主题的优秀文章


看看MSDN杂志上的解释。MVVM广泛用于WPF应用程序开发。

你能给我举个例子吗?我已经在我的应用程序中使用了BO和分层技术。但即使如此,我也发现需要大量的编码才能将我的代码插入新的UI技术。BO?你这是什么意思?@Steven-“业务对象”-但这纯粹是暗中刺伤业务对象。这是DB中的表阴影类。在模型-视图-控制器模式中,实体(在您的例子中是DB阴影类)是模型。模型只负责数据的内容。控制器只负责实现模型和视图之间发生的事情的逻辑。视图只负责显示一个界面,并发送已请求操作的消息。控制器处理动作请求并执行所需的动作。我已经在应用程序中使用了BO和分层技术。但即便如此,我已经看到,将代码插入新的UI技术需要大量的编码,这种“新编码”应该局限于特定于UI的行为。如果没有,你应该重新检查你的BO和DAL。作为一般规则,您不应该在业务层导入
System.Web
,或者在UI层说
System.Data
。@Chetan Sastry:我同意90%。对于
System.Web
我完全同意<但是,code>System.Data包含
DataSet
DataTable
,这两种数据在UI层的数据绑定中非常常用。我个人更喜欢并推荐POCOs将数据传递到UI层,但事实上有相当多的人仍然使用这两个类。但是,对于名称空间中的所有其他内容,我都同意。