Web 与桌面应用程序中的耦合和设计模式

Posted

技术标签:

【中文标题】Web 与桌面应用程序中的耦合和设计模式【英文标题】:Coupling & Design Patterns in Web vs Desktop Applications 【发布时间】:2014-06-13 04:05:32 【问题描述】:

我主要是一名桌面应用程序开发人员,但我最近一直在做一些网页设计项目,并意识到我在文件之间切换的次数要多得多,而完成的工作要少得多。

问题:

在开发桌面应用程序时,我最喜欢的部分是确定要使用的最佳设计模式和数据结构,以最大限度地减少耦合并最大化内聚。然而,对于网页设计,我似乎在结构方面做得很好。大量所需的脚本/编程语言与此有很大关系。尽管我理解他们,但有时让他们完美地合作会让人筋疲力尽。在一个项目中,您可能会使用 html、CSS、javascriptphp、SQL、XML、C#/VB 等。然后,每个项目都有任意数量的文件,并且对一个项目进行一次更改可能需要更改许多其他文件。在一个抽象的世界里,我认为整个过程会更加简洁和统一。

问题:

我通常使用 MVC 设计,这样我就可以设计视图,将所有触发器链接到控制器,并在控制器/模型上工作,而无需再次触摸视图。有没有办法在网页设计中模拟这一点?从桌面应用程序移植到 Web 应用程序的设计模式有多好?有没有办法减少耦合感?

【问题讨论】:

【参考方案1】:

我通常使用 MVC 设计,这样我就可以设计视图,将所有触发器链接到控制器,并在控制器/模型上工作,而无需再次触摸视图。有没有办法在网页设计中模拟这种情况?

使用事件属性来模拟这个:

<div class="view" onclick="controller('click')" onblur="controller('blur')" onload="controller('load')" onunload="controller('unload')" onerror="controller('error')">
</div>

有没有办法减少耦合感?

每个级别使用不同的语言,例如:

XML 用于模型,XSLT 用于视图,CSS 用于控制器 JSON 用于模型,JSON.parse 用于视图,AJAX 用于控制器 CSV 用于模型,FTP 用于视图,套接字用于控制器 模型的日志文件,视图的 SVG,控制器的 Perl SQLite 用于模型,CSV 用于视图,电子表格用于控制器 hTurtle 用于模型,GRDDL 用于视图,jQuery 用于控制器 模型的网关,视图的 PubSub,控制器的代理 模型的元数据,视图的元对象,控制器的元字符 模型字典、视图哈希数组树、控制器调度表 模型缓存、视图模板、控制器过滤器 模型的 URL,视图的 URITemplates,控制器的 URITemplate 解析器 模型的记录集,视图的 Heredoc,控制器的高阶函数 indexedDB 用于模型,HTML 用于视图,JSON.stringify 用于控制器 HTML 用于模型,CSS 用于视图,CSSOM 用于控制器 数据:模型的 URI,视图的 HTML,控制器的 CSS XML 用于模型,SVG 用于视图,SMIL 动画用于控制器 模型的 URL、视图的请求正文、控制器的请求标头

参考文献

Reusable XSL Stylesheets and Templates - Tony Marston The hTurtle Microformat CSS 2.1:Precedence of non-CSS presentational hints XHTML Flavors comparisons oneBox SMIL: Challenges Microsoft Application Architecture Guide, Chapter 8: Data Layer Guidelines RIA Services - Enterprise Patterns with WCF RIA Services Hashed Array Tree Diagram HTTP: The Request URL Session Programming Guide: About the URL Loading System C#, Web API: HTTP GET with a Request Body JMESPath: A query language for JSON Encoding Dublin Core Metadata in HTML DBI recipes Ots Labs: Ots Media Query Language (OMQL) Documentation What is the difference between the Data Mapper, Table Data Gateway (Gateway), Data Access Object (DAO) and Repository patterns? Javascript: Using reviver function, I seem can't get to alter all the keys, while concating the numbers Eliminate duplicates in array (JSONiq) rendering tree view from json callback How to parse or query complex JSON in JavaScript Parse a json file with nested indexes and save as csv Adding value to JSON child array dynamically? how to get companies id from linkedin jsapi How to translate XML to JSON? What are the differences between using JSON arrays vs JSON objects? Advice for multi level csv file creation

【讨论】:

以上是关于Web 与桌面应用程序中的耦合和设计模式的主要内容,如果未能解决你的问题,请参考以下文章

微服务设计之API网关

基于 Dojo toolkit 实现 web2.0 的 MVC 模式

功率放大器在电容耦合型无线电能传输系统中的应用

web前端之JavaScript高级程序设计六:事件

[原创作品]观察者模式在Web App的应用

Spring 从入门到精通系列 02——程序的耦合问题及工厂模式解耦