Clojure 模型-视图-控制器 (MVC) 设计

2024-01-01

我正在使用 Java Swing 在 Clojure 中编写桌面 GUI 应用程序。通常,在使用 Java 时,我会根据 MVC 设计模式并使用观察者模式来设计应用程序。通过这种方式,视图与模型分离,并且两者的更改不会相互影响,从而使进一步的更改变得更加容易。

我想知道 Clojure 是否有比普通 MVC 和观察者设计模式更好的方法来解决这个问题?我是函数式编程的新手,所以我不确定如何使模型与视图分离。我需要这样做,因为应用程序将被迭代开发,并且可能会进一步出现具有挑战性的要求。

将不胜感激任何帮助。

Thanks,

Adam


当您拥有一阶函数、宏(代码即数据)和并发持久数据结构时,Java MVC 世界中的许多设计模式都会变得有点愚蠢。例如,“观察者模式”基本上只是一个设置了一些手表的代理。它从模式转变为函数调用。

如果您将状态(模型)存储在 ref 或代理中,并使您的视图成为显示该状态的函数(在函数式编程的意义上);当你的控制器成为一个函数(同样是 FP 意义上的函数),在给定旧状态和一些新输入的情况下生成新状态时,MVC 模型就会很好地发挥作用。

它有点过时了,但是 Stuart Sierra 的网格袋布局柱 http://stuartsierra.com/2010/01/05/taming-the-gridbaglayout确实帮助我开始了这个领域。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure 模型-视图-控制器 (MVC) 设计 的相关文章

随机推荐

  • 为什么u8'A'可以是char类型,而UTF-8最多可以是4个字节,而char通常是1个字节?

    我正在读书wchar t在一般编程中有什么用 https stackoverflow com questions 13509733 并在接受的答案中发现一些令人困惑的事情 更常见的是使用 char 进行可变宽度编码 例如UTF 8 或 GB
  • Swift:如何从资产中获取图像名称

    我的资产文件夹中有 500mb 的图像 我不知道他们的名字 有没有办法访问它们 将它们存储到数组然后显示 示例 我存储了 3 张图像Assets folder1 folder2文件夹 2 包含那 3 个图像 我需要获取这些名称 这就是我需要
  • Selenium-rc:如何在 python 中使用 CaptureNetworkTraffic

    我发现了许多关于 java 中的 selenium 的教程 其中您首先使用以下命令启动 seleniums start captureNetworkTraffic True 但是在Python中start 不接受任何参数 你如何通过这个论点
  • 写入大量、复制、大于内存的键值存储

    我正在寻找可以从 EC2 实例使用的键值存储 item 只是一个非结构化字符串 不需要索引 项目大小可达约 5MB 但通常低于 10kB 很多写入 读取不需要很快 可以把memcache放在前面 缓存经常需要的读取 数据太大 无法装入内存
  • 如何在 ClickOnce 应用程序的无签名程序集项目中设置 LARGEADRESSAWARE?

    我有一个带有接下来两个编译后命令的应用程序 call editbin LARGEADDRESSAWARE TargetPath call editbin LARGEADDRESSAWARE ProjectDir obj PlatformNa
  • 樱桃皮和wxpython

    我正在尝试使用 wxpython ui 制作一个cherrypy 应用程序 问题是两个库都使用闭环事件处理程序 有办法让它发挥作用吗 如果我有 wx ui startcherrypy 会锁定 ui 吗 请参阅我的回答CherryPy 干扰
  • 如何将 csv 文件从 google 云端硬盘上传(并使用它)到 google colaboratory

    想尝试一下 python 和 google colaboratoryseemed最简单的选择 我的谷歌驱动器中有一些文件 想将它们上传到谷歌合作实验室 所以这是我正在使用的代码 pip install U q PyDrive from py
  • Jquery .ajax() 本地测试

    我有一个小的 ajax 函数 它尝试在文档准备好后加载一些内容 document ready function ajax url php accounts blocks php cache false beforeSend function
  • 从 Javascript 触发回发

    好的 我知道这个问题已经被问了很多次 并且我在网上找到了大量有关此问题的信息 不幸的是 这些似乎都不适合我 基本上 我运行一些 JavaScript 来响应用户事件 JavaScript 获取一些信息 一个 int 然后我想将其返回到服务器
  • Google Map API v3 ~ 只需关闭信息窗口?

    尝试简单地关闭信息窗口 我已经有了一系列标记 所以像这样的东西会很好 谢谢 MyMarkers i infowindow close 随着v3 API http code google com apis maps documentation
  • 在一列或多列中查找独特的单词?

    我正在考虑在我的 ASP NET 网站中实现标签 在研究了几种算法之后 我倾向于拥有几个包含一个或多个标签词的数据库列 然后 我将使用全文搜索来查找具有指定标签的行 所有这一切看起来都非常简单 除了一件事 我需要能够生成可用标签列表 用户可
  • R - 按组有条件地对多列进行升序或降序排序

    我以前没有遇到过这个问题 我想根据条件对组内的多列进行升序或降序排序 library dplyr data lt mtcars gt select mpg cyl disp If cyl lt 4 我想排序mpg disp 按该优先级 按升
  • BB10 Cascade 命令行开发

    如果您了解 Qt 那么 BB10 的编程现在应该会容易得多 所以我决定尝试一下 并且我一直在阅读以下内容 https developer blackberry com cascades documentation getting start
  • 在图形环境中,术语“橡皮筋”是什么意思?

    在不同的地方 我都看到过在指代图形绘制时使用的术语 橡皮筋 在这种情况下 人们似乎建议使用 XOR 进行绘图 我的印象是该术语指的是一种用于避免重新绘制整个框架的特定绘图技术 然而 我还没有找到任何可以准确定义 橡皮筋 一词含义的内容 只是
  • 构造函数作为委托 - 在 C# 中可能吗?

    我有一个如下所示的课程 class Foo public Foo int x 我需要将委托传递给某个方法 如下所示 delegate Foo FooGenerator int x 是否可以直接将构造函数作为FooGenerator值 无需输
  • JavaScript getter 和 setter - 递归问题

    JavaScript 的 setter 和 getter 中的 字符有何意义 例如 我有以下代码 可以正常工作 var user get name return this name set name value this name valu
  • 具有通配符属性名称和特定属性值的 C# 和 XPath

    我可以使用 XPath 查找具有名称以特定字符集开头且属性值包含特定值的属性的所有元素吗 例如
  • 调用验证后容器不会调整自身大小

    通过手动交换组件后add and remove 我调用validate 在容器上 根据文档 validate 方法用于使容器布置它的 再次子组件 当该容器的 子组件被修改 添加到容器或从容器中删除 或者 布局相关信息已更改 容器已被 显示
  • 使用 WordApi 1.3 时 context.application 未定义

    使用 WordApi 1 3 应该可以使用新的创建文档方法 https github com OfficeDev office js docs blob WordJs 1 3 Openspec reference word applicat
  • Clojure 模型-视图-控制器 (MVC) 设计

    我正在使用 Java Swing 在 Clojure 中编写桌面 GUI 应用程序 通常 在使用 Java 时 我会根据 MVC 设计模式并使用观察者模式来设计应用程序 通过这种方式 视图与模型分离 并且两者的更改不会相互影响 从而使进一步