找回密码
 注册
关于网站域名变更的通知
查看: 392|回复: 1
打印 上一主题 下一主题

平台研发的一些想法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-17 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
最近公司研发部门提出了公司级技术平台的建设规划(下文以ABC平台指代),我将个人想法笼统地归结为七个问题,以自问自答的方式表述了对平台研发的一些个人见解,现分享出来供大家参考,欢迎讨论,欢迎拍砖。- P" j  b  Z2 v6 ~

# ~% a' a) ], w+ M% c首先列举出七个问题(欢迎大家分享自己的想法):3 W) C4 U2 `* ?9 B
4 [/ y4 q9 P6 I0 A) m. p
•ABC平台是什么?近期、远期目标是什么?
) y. _/ c# X! x- T: J: K•如何保证研发方向不偏离预定轨道?# u( ?  `. I' A% H  C
•架构风格、技术选型等方面的倾向性指导意见有哪些?
& |; Z& S: n& I: `# `•平台选用迭代的方式开发,模块的优先级应如何定义?
. T$ P: k$ J4 t% ~( }•针对平台模块,可否抽象出统一的作业指导说明书?" r5 n7 p/ k7 B0 G
•平台模块可否委托研发?如何施行?
. M& I3 Z# a0 \/ X•ABC平台研发的产出是什么?除了平台本身还应该有什么?2 J2 ]' {3 v/ ^
7 Z; |" u% K9 \

$ T& i0 n" L  g( S下面我将依次作答,表述近期的思考结果并归纳为一个关键词。, a8 b& ?2 p- d) J+ g

: z3 @( f/ |% C/ }: E  q. K- ]( o! q, R$ q/ O3 M

) F, j. {- I4 T0 X) ~% u7 `问题一:ABC平台是什么?近期、远期目标是什么?$ k, q7 }+ Z- {" ?& ~
针对第一个问题,我提取“定位”作为关键词。
6 X1 [" O) j' @5 X" Q* h
+ i2 K3 T3 U3 U8 p1 u! j0 C, x) J' [
( A2 Q7 V! S8 }" K6 c' I$ I) h9 _0 B  E/ A
" j+ f/ a* s# F
首先,ABC平台处于操作系统和基础环境之上,这里基础环境是Java、.NET、PHP或其它;其次,ABC平台(Platform)应该包含一个通用的技术框架(Framework)和一些通用模块(Component);ABC平台与特定的业务领域相结合可以形成应用平台(例:针对“人力资源”进行领域建模,然后在ABC平台的基础上进行外延开发,最终形成人力资源应用平台);应用平台提供二次开发支持(继承自ABC平台,可能包含泛化的成分),具体项目按现场要求扩展后形成应用系统。0 c5 }" F( ^8 t9 q

& o0 Y& ?6 P9 B0 K1 [在理想的情况下,业务部门只配备实施工程师不承担开发工作,因而ABC平台应该是“一组隐含层级继承关系的应用平台集合”,实施工程师在项目现场主要承担系统初始化相关的配置工作,其次是有限的二次开发定制。但现实和理想之间还有相当大的差距,所以ABC平台在近期只是“一个技术型的开发框架和一组可供自由装配的通用模块”,业务部门选用ABC平台可以节省相当一部分开发成本,但开发资源的投入仍是必不可少的。' w9 V4 Z: @9 M+ a/ _
/ ?8 G5 R. f$ Q( t+ z4 v# q
6 W9 x" F" ~4 M  ^+ G# V
% }1 [4 M! O5 N  b
问题二:如何保证研发方向不偏离预定轨道?) {& P0 x/ \3 K3 \7 A2 o
设当前位置为点A,近期目标为点B,远期目标为点C,两个箭头连起来即为我们的预定轨道。
; N, o* o4 w) P1 C( v) R! V9 o( D. q1 `2 S- ?+ T4 O* K' L$ Q

* ?! M4 _8 k  _. A% V; N% c7 R) w2 P# r% X! R

9 J; S  g$ U% d我将箭头视作一条水渠,我们当中绝大多数人的任务在微观上看就是挖坑,按照点动成线的规则,坑挖够了渠也就修好了。前提条件是不能乱挖,乱挖一气莫说修渠,即便别人修好了也可能会挖断。+ C' ?' ]" H( |$ ^
5 j  P; \$ r! ?1 H4 K2 D
迄今为止,我们一直都在兢兢业业地“挖坑”,每个“坑”都挖得眉清目秀,可惜若以“渠”的标准衡量就惨不忍睹了,“眉清目秀的坑,惨不忍睹的渠”原因何在?我个人认为根本原因是大家眼里“只有坑而没有渠”,“坑”首先应该是“渠”的一部分,如果不符合“渠”的要求,再漂亮的“坑”也不是好“坑”。我们需要定义一个标准,说明什么样的“坑”是好的,每个挖“坑”的人在开挖之前不但要拿“坑的标准”严格要求自己,并且要把自己的“挖坑”规划拿出来集体评价,甚至是在“开挖”之后也随时展示“坑的进度”,看是否跑偏了(水渠要求坑深1米宽2米,当前状态是深2米宽1米,下一步还要计划深挖显然是不合适的)。+ \& ?6 [' ]" A4 r$ T% D$ I: m
# s' I2 I5 H* \8 N. Q' b
说了半天挖坑问题,再次回到ABC平台开发,我觉得保证研发方向的关键是“协作”,我们需要引入一套行之有效的协作模式并切实有效地贯彻执行(标准是死的,人是活的,标准可以变,执行是关键),这里的协作模式可以是业界流行的标准开发模式的变种(例如我们选择敏捷开发中的Scrum进行适度调整),具体如何尚需开发团队集体探讨。
4 t, J% r( B: u0 h) c+ y
- E+ }4 V: x, G2 R" l% p, r) d4 t0 D( l+ [) d& f, p6 r& p  R
* F8 u" Y1 Y. B/ b& R. C
问题三:架构风格、技术选型等方面的倾向性指导意见有哪些?: K0 l: E/ a" r3 y: r3 p
这里继续沿用问题二中“挖坑”的理念,我们需要明确“什么样的坑是好坑”,因而我选择“标准”用作问题三的关键词。
9 i/ M0 E8 M, k; ]2 m- Q1 U3 [. e5 }9 Q- k+ T
架构风格是描述某一特定应用领域中系统组织方式的惯用模式,附加上技术选型,我将其理解为倾向性的指导意见,具体条目仍需集体讨论,这里列举我个人的部分观点用作示例。
% V- P! u, w9 U! c: q5 o- g7 @$ k) y% |' i+ [
' `* e5 S: ~8 g

" V/ c6 f; }& B2 n0 V* [6 M& J( `8 o- Y
规约方面的倾向性意见:
- D! ]" c: E. ^8 z: v3 X
# X: O4 Y3 ]$ s7 z3 N- _  W1) 平台整体基于SOA设计,引入企业服务总线(ESB);7 @9 b8 k  j% F) h; A$ t2 V. ]
' y3 T2 {& W! ?0 K, p
2) 针对具体应用系统,采用分层架构风格;
1 b: [. ?5 F/ |
, h( B; {+ t/ ~' q! C- W9 ^3) 层次之间通过接口进行协作;
! l% @- n7 B& p) Y$ H! |: K) \- c% y0 j3 u
4) 层间传递的对象是为实体类,在规约层定义;3 X9 S# n2 [- ^/ O

% v8 |3 o# ^# k  @5) 实现层依赖于规约层,业务逻辑层的具体实现依赖于本模块相关数据层接口、实体类,与关联模块的业务逻辑层接口、实体类也可能存在依赖关系,不引用其数据访问层接口;
8 }2 l" ]7 ]( a& P4 i  M; I
7 U" E/ R# s0 r6 a. _; e6) 作为消费者引用外部模块时,须在内部定义提供者接口(归属于业务逻辑层),然后针对外部模块按提供者接口标准设计专用适配器完成数据转换;
6 G. V5 v% q9 t) S
+ l; q8 c1 j# M$ c7) 层次之间采用IoC的方式实现整合;9 l1 ^8 h" u* b5 v: N

2 D0 k4 T, a5 J8) 作为生产者对外提供服务时,须将服务接口封装形成应用支持SDK。
8 F/ u$ l; I" u/ j8 Z$ x3 k) ?( t% q3 v+ W. r! e
实现方面的倾向性意见:
5 h! S. m2 F; ]; v9 D" N
% S9 z1 f+ S+ B0 [& w: j( da) 技术路线选择java,提供.NET应用支持;1 d" h  j* R( R
" t* k9 M5 \* |6 W" T4 J1 B
b) IoC框架选用Spring;
3 y9 a& l# g$ M& Q, D& T  Z: s( a7 g, A  |3 H+ S" n- y* B+ o
c) 数据库以Oracle和Sql Server为主,预留扩展接口;- D& p) h# r. Q5 u5 F

  c7 I$ }2 L5 `9 gd) 数据访问层以Hibernate为基础进行封装实现;
' A. _* l2 [( Z6 e% w' j, ]& S* o( b# C/ e! N$ v- M$ Z
e) 基于Web的前端展现以Extjs为核心,允许引入Jquery;6 x) _3 r# F" b7 b1 c
. J# [0 J5 W: `! \) O; w
f) 浏览器和web服务器端的ajax交互以extjs的direct为主;" Y0 }* F- c* R. z: r$ y* P3 W* T6 O2 m

5 [! x6 }1 f: }5 k6 wg) 为了增强用户体验,需统一界面风格和配色标准。
8 K3 V9 n1 R% A+ H* m" |5 S
/ B, D6 k6 x. D2 {+ i# c2 a
+ j& i' F; @8 d( S9 D- |6 o" _, c7 Q: Q
此外,诸如“分页查询的适用场景”、“存储过程的引入原则”、“事务控制的指导意见”、“安全通讯的备选方案”之类的指导意见库也需要不断的完善和丰富。9 D4 i- E& |5 N1 y1 i% t; i( \; f
+ ^4 |/ Z$ ~" P8 j& D
8 g. ^7 r9 m8 m7 A% o
+ L* q! L1 B& l1 e+ U1 C% Q" [
问题四:平台选用迭代的方式开发,模块的优先级应如何定义?: F1 j4 e6 t8 Q1 e* a8 y; w! A
ABC平台的用户是业务部门,基于ABC平台开发的应用系统才会面对真正的终端用户,为了“在达成最终用户要求的基础上降低个人工作强度”,实施工程师必然会综合考虑最终用户的“应用级”需求,传递到平台研发这里,形成了平台开发要求。这里我没有使用“需求”,因为用户提出的永远都是要求,需求是由项目组相关人员分析获得的(个人观点),提交用户确认的需求分析报告中已经包含了功能优先级的定义。+ ^5 e0 n1 h$ x$ x

7 |) G# v4 f! j由于着眼点的不同,开发团队和用户理想中的功能模块优先级很难获得统一。用户采用“哪个先上线带给我的好处最多”来判断,而开发团队则用“如何安排次序最能节约研发成本”来评判,最终的选择结果一般是二者相互妥协的折中。
, I' Q9 G  [: A' F% U1 {  M
+ L# Y" I& Z7 ?( l对于ABC平台的研发,我觉得可以尝试考虑“最小可用版本包含什么功能”、“再扩大一下范围呢”、“先不做aa,直接做bb,能否满足可用要求”这几个问题来定义模块优先级。显而易见,业务部门眼里的“最小可用版本”应该不会包括系统服务总线,这就是冲突,需要讨论,需要权衡。1 @1 y8 b: i0 `% o/ U1 n. d

1 s7 }/ d3 [- G' C1 x' L/ c% x本节关键词:权衡。2 \1 B2 T  E0 m7 O: b

9 U7 X) ?' s$ _7 i( W+ [) S% `) U% X- l! O* J

9 h; |! ~% s. F( b问题五:针对平台模块,可否抽象出统一的作业指导说明书?
/ D  {+ E. z8 O7 o4 {作为具备多年实践经验的软件工程师,我们都熟悉软件工程中定义的开发方法和开发流程,然而直接用作平台模块的作业指导却显得过于遥远,虽然我们理应遵循软件工程的各项原则,但我觉得依然需要一个可行性较强的作业指导说明书作为补充,或称之为操作指南。
. a: v. [0 F+ q: x5 z" L; ]" b0 F6 C+ m( O; t
我尝试着为这个操作指南罗列了如下条目(当然,若真的施行,还是需要研发团队集体的力量):; W3 i, t1 {0 N# X& ^

0 m8 L3 j! v" A9 S; R1) 模块需设置“产品经理”之类的岗位角色,对整体功能和研发路线负责;
7 i, x+ v6 e  Z7 P6 i0 H! }: I8 W- o9 p- m0 T. t( b5 ^1 l
2) 产品经理主导需求调研和分析过程,是需求规格说明书的责任人;
! p( U0 U  I+ G9 r( ~7 \; h9 k' d* p* }" c2 X2 C# U
3) 模块的技术架构遵循统一的平台标准;& }$ |9 |/ n8 ^2 }) y9 B
: f3 c2 E7 r) O( l
4) 模块首先确定其功能定位和设计目标;7 H' Q7 F; y2 D# T6 Z

' G0 F6 b" L2 Z  I" v5 x& d5) 模块第二步要明确的是关联系统和交互接口;( B6 k2 |1 A6 M8 Y* N7 m. N& ~
% z; t% Y* X8 P% I  @* y; T; w
6) 将模块需求分类,为非通用需求设置辅助工具单独设计;! p: {3 P8 {( }
3 ]7 Q, t& ~/ v! c
7) 模块内部功能细分形成逻辑独立的子模块,按实际需要提供剥离支持;
* L7 f& Q+ {4 p* v4 J* q( S2 S6 N
4 z1 C/ Q! l. j1 d8) 外部接口的定义和伪装实现优先于内部设计;
  F! W. U0 o7 @, f6 o
/ T, M3 r. o! X# S3 Z* ^2 {本节关键词:指南。( f5 L- f  e+ k! Y
& k+ p- s% f( ]: n' G+ I( z, z- o

1 k+ O% i5 u! b1 h# }1 O% ~# u& D7 ^+ e( B' [
问题六:平台模块可否委托研发?如何施行?# ]  U' ?, A+ j
对于不能直接产出利润的平台研发,公司的资源总是紧张的,人手总是不足的,除了补充人员之外,我们可否选择委托研发呢?这里我没有使用“外包”,因为委托研发除了外包,还有“交由业务部门自行设计开发”的一层意思,而且我个人认为编码实现外包是可以的,而系统设计最好在公司内部实现,至于具体模块的产品经理(Product Owner)必须是内部人员。
8 T- M9 w# b" }8 r, K8 n
. L$ J, p4 \" n% o委托研发的核心思想是研发任务“分流”,而工作“分出去”的重点在于如何“收回来”,这就需要制定一套评价体系(就是问题三的输出结果)用作任务回收时的验收标准,向业务部门分派任务时申明验收标准(他们无须理解水渠的规划,只需保证挖的坑符合特定要求即可)并附带作业指导说明书(诸如“如何挖坑更省力”、“论铁铲和䦆头在挖坑工作中的效用”之类的东西),只要业务部门遵循这些规范进行开发,最终就可以顺利地纳入ABC平台达到“水到渠成”的效果。
4 ?+ N5 ^$ {7 d2 |9 b8 j* O1 |
* t) @! g' {* s7 s4 [/ p本节关键词:分流。
' d8 M" e2 L) U% e# q3 o) N9 \5 `2 t% f+ J7 l
9 T( U- y- [6 H& J/ o& Y3 O

; I1 q" s% q7 d& _- S  B) @问题七:ABC平台研发的产出是什么?除了平台本身还应该有什么?
' T  H: Q9 r2 P% _) j虽然我们当前的主要任务是研发一个切实可用的优秀平台,但本着效用最大化的原则,还应当考虑一下平台研发的附带产出。对于这个问题,我首先想到的是“锻炼队伍”,后来又归纳出了“求渔”一词。' P$ i, U& J. ~1 n
: B1 p( r5 [8 g, B. n: u
话说“授人以鱼不如授人以渔”,这是从赠予方的角度解读的,假设我们是接受方呢?于是想到了“求渔”一词,然后ABC平台在我眼里就成了一条鱼,如果通过这次捕鱼(不挖坑修渠,改结网捕鱼了)的经历进行有意识地总结,提升到渔的境界岂不更好?我们总结一套适合公司现状的行之有效的系统开发规范,新成员加入时首先参加流程培训,而后即可以最快的速度融入团队开发,虽然这些已经超出了ABC平台的范畴,但我还是觉得非常有必要分析讨论一下。
5 {. m$ j% B. R3 b1 T: _3 k
# [3 C. J" _0 }8 D, }7 z! M0 w+ q! U本节关键词:求渔。
. P- h; a6 Y& y3 H0 S) R+ J0 V: L* j8 Z7 U8 S0 ?( F
/ j- A9 L2 W+ ]& f
0 R( [4 r% l" `/ F  s8 u& l9 l
最后总结一下,我对平台研发的个人想法主要集中在“定位”、“协作”,“标准”、“权衡”,“指南”、“分流”,“求渔”七个关键词上,或有词不达意之处,仅供参考,欢迎拍砖。
, q; y  e2 r" L+ L5 `9 ~

该用户从未签到

2#
发表于 2020-8-17 15:31 | 只看该作者
“定位”、“协作”,“标准”、“权衡”,“指南”、“分流”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 13:05 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表