Son*_*oth 11 model javafx cad clojure
我正在尝试为原理图,布局,绘图材料设计桌面UI.只是寻找实际软件设计师的高级建议.
假设一个内存中的"数据库",(所有用户数据的任意深度的clojure映射,以及可能的另一个用于应用程序首选项的等等),我正在研究如何在这些上执行模型 - 视图 - 控制器的事情,其中数据可以通过以下任何一个或多个来呈现和修改:
修改其中任何一个应立即显示在每个其他活动视图中,包括文本和图形,而不是在单击"确定"后...因此不允许使用模式框.如果出于某种原因,表视图,检查器视图和图形渲染都在视图中,以图形方式拖动框的角应立即显示在文本中等.
有问题的平台是JavaFX,但我想在UI和其他所有内容之间进行清晰的分离,所以我想避免bind使用JFX,因为这会将我的设计数据与JFX Properties紧密联系起来,增加了模型的颗粒感,并迫使我在标准的clojure函数之外工作以处理数据,和/或大量处理整个getValue/ setValue世界.
我仍然假设至少有一些有状态/可变性,并使用内置的Clojure功能,例如add-watch对atom/var/ref 的能力,并让运行时信号依赖于函数.
特定于平台的交互将与实际的UI紧密相关,例如reifying ActionListeners和处理ObservableValues等,并将尝试最小化对JavaFX Property等实际应用程序数据的依赖.我不是为了这个而招待FRP.
我不介意扩展JFX接口或构建我自己的协议来使用特定于应用程序的协议defrecord,但我更喜欢将应用程序数据保留为直接的Clojure数据,而不受平台的影响.
问题是如何设置这一切,最接近不可变模型.我看到几个选项:
(deref...)垃圾.我相信这就是JFX想要这样做的方式,在叶子节点等处有巨大的Properties数组,感觉很臃肿.使用这种方法,它似乎没有比用Java/C++编写代码好多少.我还需要能够多次实例化一个数据模板.因此,例如,如果用户更改在多个位置使用的符号或形状,则将在任何地方应用单个编辑.我相信这也需要某种类型的"指针"式行为.我想我可以将一个原子存储到模型中,然后根据需要进行实例化,并且它可以在任何上述粒度模型中工作.
还有其他方法吗?试图用函数式语言做一个类似GUI编辑器的工具只是愚蠢吗?谢谢
我认为使用函数式语言来做类似GUI编辑器的工具并不愚蠢.但我不能声称对你的问题有答案.以下是一些可能对您的旅程有所帮助的链接:
Erik Meijer对功能与命令式代码有一个很好的引用:
......无论是Haskell,C#Java,F#,Scala,Python,PHP都想到了拥有大量与外部世界交互的命令式代码的想法,并且在那里有编写函数的纯代码岛一种纯粹的方式.但你必须决定这些岛屿的大小和海洋的大小.但答案绝不是只有岛屿或只有海洋.一个优秀的程序员确切地知道正确的平衡.