限额完全适合任何评估比额表,凡表示比另一比额表更佳者,则不知情。 软件结构很少涉及绝对数,而是涉及利弊,更经常地说,不应使用X线really了解所涉影响。
布洛奇基本上是由事件驱动的建筑,而立方米则属于香草。 这同样影响到任何事件驱动的结构。
简言之,事件驱动或未发生
// this is normal / vanilla code, like cubits
myFuction(); // i m just calling my function here, nothing magical going on
myFunction() {
print( running my function );
}
// this is event driven, like blocs
eventEmitter.emit(SomeEvent()); // emitting an event, i don t know if it will be handled.
on(SomeEvent).exectute(myFunction);
// somewhere else in your code base...
on(SomeEvent).exectute(myAnalyticsFunction);
myFunction() {
print( my function );
}
myAnalyticsFunction() {
print( my analytics function );
}
上面的法典显示,在香草执行与驱动的活动之间存在差异。 由于你能够看到事件驱动的建筑有自己的缺陷:
- adds complexity
- adds indirection, you do not call the function directly
- you cannot add a breakpoint to flow through code !
- you cannot know which handler will execute after an event is emitted just by looking at the source of emission (you have to do a search)
- you don t know in which order an event will be processed
它增加了以下优势:
- allow you to decouple the emitting site from the processing sites
- allows you to add event handlers at will without changing the existing code.
- allows you to easily add cross cutting concerns (logging, analytics..) by just subscribing to all events.
无论你使用事件驱动的结构,你都丧失了传统法典的某些好处,应当谨慎使用:必要时。
事件驱动的结构的一个好处是,事件可由0或多位操作者使用,而排放者并不关心。 不利的是间接和外部锅炉板。
Bloc vs Cubit
Traceability
当你使用一个集团时,你有一个<代码>传输代码>,其中包含:
Transition {
currentState: AuthenticationState.authenticated,
event: LogoutRequested,
nextState: AuthenticationState.unauthenticated
}
当你使用时
Transition {
currentState: AuthenticationState.authenticated,
nextState: AuthenticationState.unauthenticated
}
一种好处是,你取得了一些可追溯性,因为你知道,哪一事件只是通过看记录而引发变化。 贵见会活动 当时发生了国家变化。
在实践中,对手来说,你常常在没有“标签”的情况下从变化本身推断出可追溯性,因为没有很多行动能够产生这种变化。
一种不利之处是间接成本,不应低估这种成本,因此,你不能gger弄并沿用《守则》(<>下定义>)。
Event sharing
从本质上讲,放弃一项行动/发明,然后被描绘成一种功能,就象直接称呼这一功能。 唯一的根本变化是,行动必须由多个消费者、集团或其他(例如分析)消费。 如果必须在各集团之间分享行动(例如重新设定的标志数据),那么,各集团可在这方面拥有实力。 然而,在不要求你的整个代码基数使用集团的情况下,还有其他实现这一点的方法。
Cross cutting concerns
我认为,事件驱动的架构的一个方面是,你必须增加大家希望适用于广泛事件的交叉关切。 例如,如果你想把所有活动推向分析,将其分两条法典,如果你已经有集团,就很容易这样做。 然而,即便如此,也要求你与集团站在一起,它只是要求在某个时候宣布一项活动,这将是一个更好的模式。
Conclusion
如果你要求我使用集团或部族,就坐在一席。 如果你有明确的理由使用某种事件,你可以补充。