<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
The architect seems a hot job in software industry. About the role or responsibility,there are a lot of definition. For me, I’d like to make things as simple as possible. So my definition is not complicated. I think the main responsibility of an architect is to sketch the high level perspective of the whole system. In other words, the architect has the ability to divide the whole system into available modules, and make sure the individual module takes a clear, and, in best case, orthometric responsibility. Further, after the division, there is a simple interaction among modules,then modules can be combined as needed.In a word, an architect master the technology of dividing and combining. To be strict, it is not only a technology, but an art design. The architect is originally from the architecture industry, where an architect is called an artist often. What is the difference between art and engineering? Engineering means repeatable, reusable and the flow is strict. Art, however, is creative ,filled with personality and the flow is optionally.
The software design is very similar to architecture design. It has to follow some engineering principles, such as open& close, inverse dependency. Meanwhile, it is also branded by the style of an architect. Each architect has his own taste, more or less, different with others.
My style is simple+extensible. I always keep the interface simple and properly extensible.
The responsibility of an module is supposed to be clean and simple, so on interface, it is supposed to present the same style. The simple also means the semantic of the interface is firm and, consequently, the interface is testable. That is the key of the interface design of an module. Make it testable!!! No matter how you change the implementation, keep the interface and the make it testable as it did.
Extensible is hard to master. We have to balance between poor-design and over-design. The
extensible contains the experience of an atchitect. In most cases, it is experience dependent. My suggestion is keep the proper extensible, and avoid the over-extensible. Let’s welcome the changes when they come. Do not expect the first design can accommodate all the new changes. Which is impossible for ever.
Ok, keep in mind ,keep it simple and properly extensible.