架构师修练 I - 超级代码控
可实现的是架构,空谈是概念 So don't tell me the concepts show me the code! “不懂编码的架构师不是好架构师” 好架构师都是超级代码控。
代码是最好的老师
基本准备
- 设计模式 - 最标准的23种设计模式基本上要有一个了解,可能一下子不能理解他们的用法,但一定要记下他们的英文名字和基本的用途,如:Factory, Wrapper (Decorator), Command, Builder等 。
- 语言规范 - 熟读语言本身的官方编码规范与命名规则,这是共同的标准,也是从官方得到写代码的第一指导。
- 要看懂UML中对类的图形表示方法(类、接口、抽象类、继承关系、使用关系)
看代码的方法
看命名
- TagBuilder - 以Builder模式实现的Html标记的构建器
- StringBuilder - 以Builder模式实现的字符串构造建器
- XXXXWriter - 以构建器模式实现的各种写入器
- ConnectionFactory - 数据库连接对象构造工厂
注:每一种基础语言会有自身的命名规则,所以必须对官方提供的命名规则烂熟于胸,既可以学习别人怎么写代码也可以规范自己的代码写法。
看接口
注:作为练习大家可以去下载我在NuGet上发布的一个名为 DotNetAge Document Storage 类库,里面就有Repository的实现
参考“最佳实践”
学
学习多种语言的动机
- 开拓视野,从不同语言中学习特有的设计理念
- 寻找与更新自己的 “最佳实践”
- 规避语言被淘汰的风险
开拓视野
我的论点是:不断学习各种语言,体验各种语言所带来的开发与设计的激情,开拓自我的视野才是一个架构师应走的路。架构师不单单是技术的选择者,而更应该是技术的整合者。
选择“最佳实践”
- ASP.NET 和 Java的思维方式与代码量差异不大,学习曲线最长、 Hosting 资源成本中等,但数据库Hosting成本高
- Php 相对前两者简单而且资源众多,Hosting 资源最多,成本最低
- NodeJS性能最高、学习曲线最短、代码量最少、资源也最多但Hosting 成本最高
成为 “O” 型架构师
学习多种语言的方法
- Delphi (1-5) (Object pascal) - 这是初恋 , 拥有最多的界面组件和最简单的可视化开发环境,VCL算是当时最好的选择。
- VB (2-6) - 最容易调用COM的语言也是做面向对象很苦B的一个了。
- C++ - 学得最差的
- java - 用来学面向对象的
- C# - 算是我最擅长的,也是做项目最多的
- Php - 只能算是懂一点
- javascript - 我最喜欢的动态弱类型语言。
- css/less - 最让我头疼 (有了Less会好一点)
- html/xml/xslt - 最容易建立方法论的标记性语言是最容易建立发散性思维与抽象思维的工具
- Objective-C 和 Swift - 现在在学的
感性认知
相互印证
长年的积累
写 - 疯狂的编码
- 易读 - 命名是否符合代码规范,所有接口是否全部代码都有注释
- 易用 - 每一个类,每一个方法都是架构师与程序员的UI,少参数,容易理解的设计可以大大减少沟通成本。
- 框架化 - 一个一个类写是很慢的事,要活用模式于代码中能同时构建出10几个或几十个类。
- 参考性 - 架构师不是程序员,写代码为的是固定核心功能与公共用法,便于成员开发。面对复杂的场景需要多写示例同时也是测试设计的易用性的方法。
- 为自己立项从现在起为自己而编码
- 多写代码片 - 对局部的理论进行实践,多写一些小的代码片段或实验程序,而按正式项目一样来对待。完整的记录,共享源码获得Feedback,有良好的注释。
- 模仿是学习与理解新事物的最佳捷径 — 可以去仿造某些项目,当深入其中可以更直接地理解设计者的最初设计想法,同时也可以得到一个仿造品(不是抄,仿造的目的是获得编码经验)
- 尝试使用模式并控制类的规模
小结
架构师之路是一条很漫长而且需要不断学习、思考与实践积累的道路。我只是走了这条路的一小段,以此总结与更多的朋友分享共勉。在下一篇文章中我将会从另一个角度来谈架构师的修改项目:表达力。希望有兴趣的朋友能给予更多的关注与反馈。
架构师修练 I - 超级代码控的更多相关文章
- .NET 云原生架构师训练营(权限系统 代码实现 ActionAccess)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(权限系统 代码实现 EntityAccess)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(权限系统 代码实现 Identity)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(权限系统 代码实现 WebApplication)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.WebA ...
- .NET 云原生架构师训练营(权限系统 代码重构)--学习笔记
目录 模块拆分 代码重构 模块拆分 代码重构 AuthenticationController PermissionController IAuthorizationMiddlewareResultH ...
- 架构师修炼 II - 表达思维与驾驭方法论
开篇之前我想先说说当年开发的那点事儿:大约10年前吧,我还是一个程序员的时候经常都是遇到这样的项目开发流程: 解决方案 :满足客户目的和投标用的一堆文档(不少还是互联网上抄的) ,是以Word为主的纯 ...
- IT架构师介绍-软件架构设计学习第一天(非原创)
文章大纲 一.架构师定义二.架构师分类与具备能力三.研发人员发展的技术路线四.架构师知识体系五.参考文章 一.架构师定义 什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也有所 ...
- iOS架构师之路:控制器(View Controller)瘦身设计
前言 古老的MVC架构是容易被iOS开发者理解和接受的设计模式,但是由于iOS开发的项目功能越来越负责庞大,项目代码也随之不断壮大,MVC的模糊定义导致我们的业务开发工程师很容易把大量的代码写到视图控 ...
随机推荐
- Regmap 框架:简化慢速IO接口优化性能【转】
1. 简介 Regmap 机制是在 Linux 3.1 加入进来的特性.主要目的是减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器.其实这就是内核做的一次重构.Regma ...
- Linux 中 FQDN 查询及设置
FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称 其实就是标注一个主机的完整域名.比如我的域名为 ifrom.top 那么它的邮件服务器的主机 ...
- [IDEA_5] IDEA 集成 Scala
0. 说明 在 IDEA 中集成 Scala 1. IDEA 集成 Scala 1.1 安装 Scala 插件 Ctrl + Alt + S 进入设置 依次选中 Settings --> P ...
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...
- Active Directory、Exchange、单点登录,企业账号统一管理解决方案
现在的公司一般都会有很多内部管理系统,比如OA.ERP.CRM.邮件系统等.员工入职之后如果每个系统都创建一个账号和密码,首先员工记系统账号就是一件非常头疼的事情,如果公司有一百个系统那就得创建一百个 ...
- Linux下搭建lnmp环境
前提:假设阅读本文的读者已经拥有基本的linux使用技巧,能够解决系统安装问题,以及软件安装的技巧. 注意: 本文所涉及的主要安装包(需要下载使用的)安装包,在本文最后会给出百度云盘链接,需要使用的, ...
- vc MFC 通过IDispatch调用默认成员函数
CComPtr<IDispatch> spDisp(IDispatch *); if(!spDisp) return; DISPPARAMS dispParam={0}; //没有参数 V ...
- 1-100求和 sum(range(101))
print(sum(range(101))) s = 0for i in range(101): s += iprint(s)
- Django商城项目笔记No.14用户部分-用户中心邮箱绑定
保存邮箱界面如下 接口设计如下 视图逻辑: 因为url是不接受pk参数的,所以UpdateApiView无法确定要更新哪个模型类,所以要重写get_object,告诉他更新哪个模型类.这里更新的是us ...
- Django使用静态文件
除了由服务器生成的HTML文件外,网页应用一般需要提供其它必要的文件 —— 比如图片文件.JavaScript脚本和CSS样式表 —— 来为用户呈现出一个完整的网站. 在Django中,我们将这些文件 ...