- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被函数式编程和响应式(Reactive)方法所感染。为了获得灵感和想法,我使用 Haskell和 an awesome Rick Hickey article 。在我自己发现的Python世界里RxPy和 funcy图书馆。现在我有数千行命令式代码,我想让它们发挥作用。如果一切都简化了,我就有了一个数据库的 getter 和 setter 接口(interface)以及一个像状态机一样工作的内核。这是它在伪代码上的样子:
class State(object):
def __init__(id):
self.data = database_interface.get_state(id)
self.status = data['status']
def process(self):
if self.status == 'init':
self.handle_init()
elif self.status == 'request_data':
self.handle_request_data()
elif self.status == 'idle':
self.handle_idle()
# etc...
...
def on_new_message(msg):
id = msg['id']
state = State(id)
state.process()
我的状态处理程序中有很多 if
和 for
命令式业务逻辑。我真的很尴尬如何从当前模型转向响应式(Reactive)和功能性模型。这里的一切都很简单,但是有过类似经历的人会理解我。我需要关于下一步的建议,从想法到实践,比简单的实用程序或函数式风格的琐碎 REST API 更大。另外,我可以通过链接到真正大型项目的源代码来获得很大的帮助,无论我在哪里可以获得想法。感谢每一位做出回应的人,让他们获得了将命令式代码移植到函数式代码的真实体验。是的,我明白它不会移植代码,而是从头开始重写。同样,我需要具有大量业务逻辑的项目示例,其中涉及数据和数据突变。不管怎样,谢谢你。
最佳答案
停止。您在生产中有数千行代码。有用。它可能是 big ball of mud ,但它有效。我是 FP 的忠实粉丝,我自己也为工作编写了函数式 Python 和函数式 JavaScript,但我觉得这是一种倒退思维。
但是,如果您无法抗拒 Shiny 新事物的魅力,请一次启动一个模块。架构让你无法做到这一点?这是一个更大的问题。首先重构以修复该问题。然后一次浏览一个模块。若能清净,则清净。如果您很难使模块变得纯净,请重构它们,以便拥有一些不纯净的模块和一堆纯净的模块,而不是所有混合模块。请注意,表面上纯模块可能会在内部使用副作用,只要它们不泄漏到模块范围之外,并且调用者无法分辨出差异这很好。现在。
现在您已经完成了,您可以逐步更改这些模块的内部实现,而不会影响程序的其余部分。尽可能尝试用通用数据结构替换自定义类,尤其是在模块边界处。请注意,这样做可能会对 perf: profile 产生负面影响!
请注意,这些技巧中的许多技巧与许多人认为定义良好的面向对象架构的最佳实践重叠(接口(interface)编程、不要让实现细节泄漏、KISS 等)。 )。这并非巧合。
这是另一个 good talk寻求灵感。这是clean architecture的链接鲍勃叔叔的。尽管面向 UI 编程,但它是相关的。
不要去读/听并说“我必须使用 IPC 消息队列来实现六边形端口和适配器模式,否则我们就完蛋了!”。再说一次,你有工作代码。仔细更改它,最好是到处修改,尊重其含义(尤其是对您的用户)。
如果这一切看起来相当残酷,那是因为我一直在这条路上走下去,相信我,这很痛苦。如果您不想看到您新发现的热情消失在一堆错误报告中,那么请缓慢而轻柔地前进。我有点喜欢 node.js
,但我搬起石头砸了自己的脚,因为我做了你所说的那种事情,永远玷污了它在我雇主那里的声誉。小心点,只要放慢速度就可以减轻自己的痛苦。
关于python-3.x - Python 在生产环境中从命令式转向函数式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678458/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
如何让我的节点始终朝着它所面对的方向前进? float tilt = _motionManager.accelerometerData.acceleration.x; [_player runActi
我继承了一个基于 Java、基于 Web 的 7 年前的产品,其中包含大约 75 万行代码。正如预期的那样,考虑到它的年龄,它不是基于 Maven 的结构,. Maven 用于构建和发布应用程序。但是
既然新版本的 eclipse 已经发布了,我应该立即转向吗?如果我的插件在 Galileo 中工作,它也能在 indigo 中工作吗? 最佳答案 如果不尝试或研究特定插件提供商关于 Indigo 兼容
我有一个使用 html、css 和 jQuery 制作的静态应用程序。我现在将其导入到 Angular 2 中,但遇到了日期问题: // GET DATE let d = new Date(); le
我在 C# 中为我的 unity 项目创建了一个植绒算法。我试着关注 this example ,但问题是把所有东西放在一起,我无法推断。以下代码是我希望拥有一个领导者跟随植绒系统的一部分。 我在基本
我有一张这样的 table Index | FeatureType | FeatureExists 1 | BR | 0 1 | EI
我有一个拥有大约 60,000 名付费客户的网站,其中 3000 名使用 Windows XP + IE 8。我想要一个可以为我的所有客户提供服务的证书(或多证书解决方案)。问题是 SHA-1 已被弃
我正在尝试找出如何以不同的方式执行我的 JavaScript 回调。 我目前的回调风格,将回调传递给函数,函数调用回调。例如: 函数调用 doSomething(function(data){
我有一个适用于 Android 2.1 的应用程序,我想为 Android 2.2+ 的设备添加移动到 SD 的支持。 我添加了代码: 但是如果我让我的项目保持在sdk level 7以上,我会出
此代码附在相机上: transform.position += Input.GetAxis("Vertical") * transform.forward * mod; transform.posit
jQuery 是 javaScript 的框架。但是,我能够很好地使用 javaScript 进行编码。我不知道如何在 jQuery 中(重新)编码它! 从头开始学习 jQuery 是唯一的方法还是我
我将一些旧代码从另一个库移至 jQuery,并在此过程中破坏了一些其他代码。我认为 jQuery 实现其 .html 函数的方式让我很伤心。 以下部分是使用以下语法通过 AJAX 调用和成功函数生成的
我在网上搜索了一些不错的代码,突然间我碰到了一个,但是它已经在 Eclipse 中工作了,因为我没有 Eclipse(而且我也不打算安装它)我可以在我的 VS10 上正确编译它。问题是所有链接器引用都
我是 Scrum 团队的一名测试人员,试图自动化我们的测试回归集。 我们的前端是用 Java Angular 开发的,我们使用 Tosca 测试套件来自动化我们的测试集。我遇到的问题如下: 使用 To
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
SVG 图标与字体图标相比有一些优势:它们可以缩放以适应可变大小的容器元素,并且理论上您可以更改各个路径的颜色。我也喜欢我可以在 Inkscape 中轻松制作它们的事实:P 但我如何在 CSS 文件中
关于将 iOS 应用程序迁移到 Swift 3.0 的过程。我终于摆脱了(所有)语法错误。 不过,我似乎还有一个很大的问题。 以下是我在构建项目时在 Xcode 中得到的最终错误消息: 这里太长了,所
自从我开始编码以来,我就是一名 .NET 开发人员。我想学习 Win32 编程。需要关于从哪里开始的建议。学习 Win32 编程的最佳资源/书籍是什么。我知道一点“大学 C++”。 最佳答案 毫无疑问
在windows上用了10多年,如何迁移到*nix平台?哪种口味更容易处理,让我更舒服,然后也许我可以切换到更标准的 *nix 口味?我已经推迟了一段时间了。帮助我进行额外的推送。 最佳答案 Linu
我是一名优秀的程序员,十分优秀!