在软件设计和架构中,“高扇入”(High Fan-In)是一个重要的概念,它描述了一个模块或组件被其他模块或组件调用的频率和广度。具体来说:
高扇入(High Fan-In)
定义:高扇入是指一个模块或组件被多个其他模块或组件调用或依赖的情况。这意味着该模块是一个常用的功能模块,很多其他模块都依赖它来完成某些工作。
示例
假设我们有一个日志组件
Logger
,它被应用程序中的多个模块调用来记录日志信息:
go Copy
type Logger struct{}
func (l *Logger) Log(message string) {
fmt.Println(message)
}
// 应用程序中的多个模块
func ModuleA(logger *Logger) {
logger.Log("Module A is running")
}
func ModuleB(logger *Logger) {
logger.Log("Module B is running")
}
func main() {
logger := &Logger{}
ModuleA(logger)
ModuleB(logger)
}
在这个例子中,
Logger
组件具有高扇入,因为它被 ModuleA
和 ModuleB
两个模块调用。
高扇入的优点
高扇入的缺点
如何处理高扇入
结论
高扇入是软件设计中的一个重要概念,它反映了模块之间的依赖关系和调用频率。理解和合理管理高扇入,可以帮助我们设计出更高效、可维护的系统。 在软件设计和架构中,“高扇出”(High Fan-Out)是另一个重要的概念,它描述了一个模块或组件调用其他模块或组件的广度和频率。具体来说:
高扇出(High Fan-Out)
定义:高扇出是指一个模块或组件调用或依赖多个其他模块或组件的情况。这意味着该模块具有多个下游依赖,它需要与许多其他模块进行交互来完成其功能。
示例
假设我们有一个控制器模块
Controller
,它需要调用多个服务模块来完成某个业务逻辑:
go Copy
type ServiceA struct{}
type ServiceB struct{}
type ServiceC struct{}
func (s *ServiceA) DoWork() {
fmt.Println("Service A is doing work")
}
func (s *ServiceB) DoWork() {
fmt.Println("Service B is doing work")
}
func (s *ServiceC) DoWork() {
fmt.Println("Service C is doing work")
}
type Controller struct {
serviceA *ServiceA
serviceB *ServiceB
serviceC *ServiceC
}
func (c *Controller) HandleRequest() {
c.serviceA.DoWork()
c.serviceB.DoWork()
c.serviceC.DoWork()
}
func main() {
controller := &Controller{
serviceA: &ServiceA{},
serviceB: &ServiceB{},
serviceC: &ServiceC{},
}
controller.HandleRequest()
}
在这个例子中,
Controller
模块具有高扇出,因为它调用了 ServiceA
、ServiceB
和 ServiceC
三个服务模块。
高扇出的优点
高扇出的缺点
如何处理高扇出
结论
高扇出是软件设计中的一个重要概念,它反映了一个模块与其他多个模块之间的依赖关系。理解和合理管理高扇出,可以帮助我们设计出更灵活、可扩展的系统,同时也需要关注其带来的复杂性和性能问题。
在软件系统总体结构图中,扇入扇出官方解释挺绕人的,常常被绕晕。
扇入:模块的扇入是指有多少个上级模块调用它。扇入越大,表示该模块被更多的上级模块共享。扇入越大,表示该模块被更多的上级模块共享。这当然是我们所希望的。但是不能为了获得高扇入而不惜代价,例如把彼此无关的功能凑在一起构成一个模块,虽然扇入数高了,但这样的模块内聚程度必然低。这是我们应避免的。----百度百科
扇出:在软件工程中的定义:该模块直接调用的下级模块的个数。在面向对象编程中,扇出应用于继承。----百度百科
我的理解是:扇入就是引入,扇出就是输出。换个词语来理解,就更清晰了,如下图:
扇入数(引入)就是引入了多少别的模块引到自己模块来,像光线汇聚。(相对于基础日志模块就是被引入)
扇出(输出)就是自己模块被多少个其他模块拿来使用,像瀑布铺洒。
#每天进步一点点#
PS:新学习到的小技能:
连接线默认情况下是折线,在选中连接线,在检视窗口中切换,可以直接切换为直线
作者:小荔枝Rose
链接:https://www.jianshu.com/p/2d196ecffd09
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 标签:调用,模块,软件设计,高扇,扇入,func,组件 From: https://www.cnblogs.com/gongxianjin/p/18290816