F#-纯功能设计而非oop设计
我想创建一个由三个代理组成的简单的“多代理”系统。对于每个代理,都会创建一个封装邮箱处理器的类型。所有代理(位置、id等)和功能(sendMessage、move)都有共同的属性,并且代理因邮箱处理器的实现(邮件的处理方式)而不同。此外,它们可能因特定代理的其他功能而有所不同。每个代理还应该包含(作为其属性之一)将向其发送消息的其他代理的列表。这是一个非常简单的模型,我计划在此基础上使用F#中的邮箱处理器 在OOP中,这意味着创建一个代理接口(或抽象类),所有特定的代理都将通过自己的实现从该接口继承F#-纯功能设计而非oop设计,f#,functional-programming,domain-driven-design,F#,Functional Programming,Domain Driven Design,我想创建一个由三个代理组成的简单的“多代理”系统。对于每个代理,都会创建一个封装邮箱处理器的类型。所有代理(位置、id等)和功能(sendMessage、move)都有共同的属性,并且代理因邮箱处理器的实现(邮件的处理方式)而不同。此外,它们可能因特定代理的其他功能而有所不同。每个代理还应该包含(作为其属性之一)将向其发送消息的其他代理的列表。这是一个非常简单的模型,我计划在此基础上使用F#中的邮箱处理器 在OOP中,这意味着创建一个代理接口(或抽象类),所有特定的代理都将通过自己的实现从该接口
我知道OOP在F#中是可能的,但是我宁愿坚持纯功能设计。然而,在我看来,OOP是这种情况下最合适的方法。如果你能给我一些关于功能设计的想法,我会很高兴的?多谢各位 您为什么要坚持纯功能设计?F#允许函数和OOP原则的干净组合,我将利用这两种机制并利用语言的强大功能
如果您想将函数和OOP方面结合起来,我将首先使您的对象不可变。因此,您使用的是对象,但使用的是功能范例。您提出了一个OOD,OOP解决方案看起来是最自然的,这是否令人惊讶 如果你在重写设计描述时考虑到了流程和数据转换,那么它自然会变成FP设计,而且在有很多“er类”的OO中听起来非常尴尬。事实上,对数据类型或需要进行的转换几乎没有任何描述。乍一看,我认为代理是三个参数的函数:邮箱、消息处理程序(或消息处理程序列表)和要联系的其他代理的邮箱列表。如果将来的分派基于消息,那么消息处理程序是两个参数的函数。邮件和邮箱列表。首先,F#中的功能风格和面向对象风格实际上并不冲突
- 函数风格包括使用不可变类型、无副作用的纯函数和F#数据类型,如有区别的联合、函数等
- 面向对象风格更关注于如何组织代码(使用类和接口),但代码仍然可以是纯功能性的,而不使用任何可变状态
- 公开一个F#事件(
event)我知道F#结合了这两种范式。然而,我的动机是找出在每种范式中可以如何做各种事情,并且给出的场景一开始就足够简单(但是是通用的,也可以用于其他场景)。我只想在本例中使用带有模式匹配的歧视联合和记录。谢谢你,托马斯。我喜欢揭露事件的想法。