1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
1
00:00:00,220 --> 00:00:02,130
I'm going to conclude this set of examples with
2
00:00:02,130 --> 00:00:04,750
a system that you might also know, Bash. And in
3
00:00:04,750 --> 00:00:08,000
case you don't, Bash is a Unix shell written as
4
00:00:08,000 --> 00:00:11,000
a free software replacement for the traditional Bourne shell, also
5
00:00:11,000 --> 00:00:13,690
called sh. So what I'm showing here is the
6
00:00:13,690 --> 00:00:17,950
descriptive architecture of the command component of Bash. So, is
7
00:00:17,950 --> 00:00:22,170
the architecture, as implemented, of the command component of Bash.
8
00:00:22,170 --> 00:00:25,390
And the component is the one here sort of highlighted
9
00:00:25,390 --> 00:00:28,120
in gray. And what you can see here, these names are
10
00:00:28,120 --> 00:00:31,640
the sub components of the command component. And if we look at
11
00:00:31,640 --> 00:00:35,000
this architecture, two design problems of the component can kind of jump
12
00:00:35,000 --> 00:00:37,870
at us. The first one is the lack of cohesion within the
13
00:00:37,870 --> 00:00:40,830
component. So, if you look here, you can see that only
14
00:00:40,830 --> 00:00:44,820
a few connections exist between the sub-components. And having a low cohesion
15
00:00:44,820 --> 00:00:47,430
is normally not a good thing for a design. The second thing
16
00:00:47,430 --> 00:00:50,860
that we can note is the high coupling. The component has tons
17
00:00:50,860 --> 00:00:54,200
of connections with other components. They're, these edges that are
18
00:00:54,200 --> 00:00:57,890
leaving the components and going towards other parts of the system.
19
00:00:57,890 --> 00:01:01,190
So basically, this component has low cohesion and high coupling, which
20
00:01:01,190 --> 00:01:04,730
is exactly the opposite of how a good design should be.
21
00:01:04,730 --> 00:01:07,410
Given the structure, it is clear that anytime you change
22
00:01:07,410 --> 00:01:09,970
this component you might need to change a bunch of other
23
00:01:09,970 --> 00:01:13,440
components in the system. And of course, when changing other components
24
00:01:13,440 --> 00:01:15,910
in the system, you might also need to chance the command
25
00:01:15,910 --> 00:01:19,060
component as well. And along similar lines, to understand this
26
00:01:19,060 --> 00:01:21,890
component you probably need to look at many other parts of
27
00:01:21,890 --> 00:01:24,690
the system, which is also less than ideal. And one
28
00:01:24,690 --> 00:01:27,580
important point here is that with all these examples, I'm not
29
00:01:27,580 --> 00:01:30,500
really trying to criticize any specific system, what I'm trying
30
00:01:30,500 --> 00:01:34,380
to show instead, is how complex software architectures can be, and
31
00:01:34,380 --> 00:01:37,040
how much they can degrade over time. And this is true
32
00:01:37,040 --> 00:01:39,660
for most systems, not just the ones that I showed you.
|