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

平台研发的一些想法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
最近公司研发部门提出了公司级技术平台的建设规划(下文以ABC平台指代),我将个人想法笼统地归结为七个问题,以自问自答的方式表述了对平台研发的一些个人见解,现分享出来供大家参考,欢迎讨论,欢迎拍砖。
6 N. p; C5 J" S5 o% i# V& @0 w! C( y
首先列举出七个问题(欢迎大家分享自己的想法):
/ A, D! s6 P! m4 x. g' \# a, e3 w8 H' x0 ]' i
•ABC平台是什么?近期、远期目标是什么?3 w0 R! P1 P8 ^+ }
•如何保证研发方向不偏离预定轨道?
& B" Q, [- S9 N2 F; C•架构风格、技术选型等方面的倾向性指导意见有哪些?3 d7 v+ q! ]# s! B" g6 Q
•平台选用迭代的方式开发,模块的优先级应如何定义?( [$ f: V" g8 Z* X$ R6 B9 A
•针对平台模块,可否抽象出统一的作业指导说明书?8 k) X& N- ^; S+ ~6 X" D5 ?1 o: R
•平台模块可否委托研发?如何施行?- ~- f$ B$ P- Z$ {' r
•ABC平台研发的产出是什么?除了平台本身还应该有什么?
( B- R' G# y0 E8 j# S; r6 s3 s; b- n( z9 D
& n* B% R& l- S3 y  K
下面我将依次作答,表述近期的思考结果并归纳为一个关键词。3 [9 m* G  I0 L( c1 e) D
/ N, S. q7 m2 m: \) e( H

) `+ V9 o/ i) |0 R0 `9 S$ s% I) [) @7 j- r" ?+ p
问题一:ABC平台是什么?近期、远期目标是什么?
) v" q) [4 ^3 K( ~& k" ~, ?针对第一个问题,我提取“定位”作为关键词。
' R; S. k  ~6 z
) O& @: P# G5 ^9 T/ R! N6 Q1 ]; J  L1 x9 U. U6 @: [7 ^4 ?
% A5 t* e, [# F& `& C
; V2 J& E, S( H3 t9 i! N; c. N
首先,ABC平台处于操作系统和基础环境之上,这里基础环境是Java、.NET、PHP或其它;其次,ABC平台(Platform)应该包含一个通用的技术框架(Framework)和一些通用模块(Component);ABC平台与特定的业务领域相结合可以形成应用平台(例:针对“人力资源”进行领域建模,然后在ABC平台的基础上进行外延开发,最终形成人力资源应用平台);应用平台提供二次开发支持(继承自ABC平台,可能包含泛化的成分),具体项目按现场要求扩展后形成应用系统。$ D: F$ n9 ?3 i1 C2 j7 X6 ]3 ~

" [" Q( M' {. Y1 |5 Q在理想的情况下,业务部门只配备实施工程师不承担开发工作,因而ABC平台应该是“一组隐含层级继承关系的应用平台集合”,实施工程师在项目现场主要承担系统初始化相关的配置工作,其次是有限的二次开发定制。但现实和理想之间还有相当大的差距,所以ABC平台在近期只是“一个技术型的开发框架和一组可供自由装配的通用模块”,业务部门选用ABC平台可以节省相当一部分开发成本,但开发资源的投入仍是必不可少的。
8 a) O7 h" F9 u8 v* U% M; d4 U1 P7 p) J9 G

. T  V% |% [9 x% v$ z1 ~( A2 v1 ^
问题二:如何保证研发方向不偏离预定轨道?
/ a) E$ d0 Z0 T+ b# L设当前位置为点A,近期目标为点B,远期目标为点C,两个箭头连起来即为我们的预定轨道。5 u  ~+ Z0 m: G( j- u( w. \

+ _+ l" w: s, p: l1 E
; ]. {; z( P1 n. |4 }' P+ ^
+ J  l* Q" {4 M. e0 a; T0 ]0 H! |( a! ^  F' U8 `
我将箭头视作一条水渠,我们当中绝大多数人的任务在微观上看就是挖坑,按照点动成线的规则,坑挖够了渠也就修好了。前提条件是不能乱挖,乱挖一气莫说修渠,即便别人修好了也可能会挖断。, x+ C8 S6 _. i+ [3 _

# j: l& I+ t- J' M' G, k4 v$ Y  F迄今为止,我们一直都在兢兢业业地“挖坑”,每个“坑”都挖得眉清目秀,可惜若以“渠”的标准衡量就惨不忍睹了,“眉清目秀的坑,惨不忍睹的渠”原因何在?我个人认为根本原因是大家眼里“只有坑而没有渠”,“坑”首先应该是“渠”的一部分,如果不符合“渠”的要求,再漂亮的“坑”也不是好“坑”。我们需要定义一个标准,说明什么样的“坑”是好的,每个挖“坑”的人在开挖之前不但要拿“坑的标准”严格要求自己,并且要把自己的“挖坑”规划拿出来集体评价,甚至是在“开挖”之后也随时展示“坑的进度”,看是否跑偏了(水渠要求坑深1米宽2米,当前状态是深2米宽1米,下一步还要计划深挖显然是不合适的)。& @" H: F8 z$ ?- w  p+ B
# [( M$ q+ d  v) N) d0 r: f
说了半天挖坑问题,再次回到ABC平台开发,我觉得保证研发方向的关键是“协作”,我们需要引入一套行之有效的协作模式并切实有效地贯彻执行(标准是死的,人是活的,标准可以变,执行是关键),这里的协作模式可以是业界流行的标准开发模式的变种(例如我们选择敏捷开发中的Scrum进行适度调整),具体如何尚需开发团队集体探讨。
! h+ h; Y& x8 n
, V% K' C; F4 q+ R9 H9 W: v/ N$ d4 ^: o
# `& h7 {. M/ y! O' Z5 J( F) I( l( y
问题三:架构风格、技术选型等方面的倾向性指导意见有哪些?
& {( L6 e4 G* c! j这里继续沿用问题二中“挖坑”的理念,我们需要明确“什么样的坑是好坑”,因而我选择“标准”用作问题三的关键词。
6 B! L5 o: a! w+ b: v: ?- s" |' n% \: T* z, F2 B2 O1 I: c
架构风格是描述某一特定应用领域中系统组织方式的惯用模式,附加上技术选型,我将其理解为倾向性的指导意见,具体条目仍需集体讨论,这里列举我个人的部分观点用作示例。+ W" I' h' i  l% B8 n* F  C1 s/ p
$ W+ K9 G1 X5 d: [. f

8 m+ ~* R3 k- F4 S: \' ?% a2 w, r5 o& P
8 L$ U* W7 {9 ]+ J
规约方面的倾向性意见:
" ?- i! }# K" T, E% f! _
$ x6 S# u/ ~: m8 s1 n0 V  s1) 平台整体基于SOA设计,引入企业服务总线(ESB);
9 g* R1 u) q5 v& [
- Y& v- m  [9 j2) 针对具体应用系统,采用分层架构风格;: f- M: \/ h5 d0 K! W

3 u4 G- `& l, O3 a( ]$ u( u$ S# @3) 层次之间通过接口进行协作;
- X! _0 e, `; K% }' c: z  w& }  |4 ~
4) 层间传递的对象是为实体类,在规约层定义;
8 t6 Z4 m* T7 i8 G2 f
2 P1 s) x! a7 s6 H5) 实现层依赖于规约层,业务逻辑层的具体实现依赖于本模块相关数据层接口、实体类,与关联模块的业务逻辑层接口、实体类也可能存在依赖关系,不引用其数据访问层接口;7 f, }$ R/ J) R6 g; I
0 |8 C: L. ~' x+ C3 W; N! x' ?, D3 s! }7 D
6) 作为消费者引用外部模块时,须在内部定义提供者接口(归属于业务逻辑层),然后针对外部模块按提供者接口标准设计专用适配器完成数据转换;
" S# a* q2 r& A: F) _# s' M# H
7) 层次之间采用IoC的方式实现整合;. f% ?! O9 a; x* N

, d& s- j) L' e  P! m) z2 }. x# [8) 作为生产者对外提供服务时,须将服务接口封装形成应用支持SDK。
2 N. @& A- U3 W3 L% W" R0 L+ U% h: h+ V' E4 I4 e+ Y
实现方面的倾向性意见:
* K: I( F8 w" Z& v
2 q: y% A/ u8 m$ b' B' Ua) 技术路线选择java,提供.NET应用支持;: r6 x; v" e' }, B/ i( O

, k+ U& N8 e. B6 z& P2 R8 F7 fb) IoC框架选用Spring;2 F) \# V! B4 M2 B3 ?$ u

+ W% E# `1 ^+ p6 v. Jc) 数据库以Oracle和Sql Server为主,预留扩展接口;
; @& |1 a$ T3 p6 l& h/ j3 }1 M
0 _# y# G( l$ Q8 \5 Vd) 数据访问层以Hibernate为基础进行封装实现;2 i4 o7 n9 s2 m2 n* V" E% k

( G* f0 ?" z3 |1 R' Oe) 基于Web的前端展现以Extjs为核心,允许引入Jquery;
; E, D, h+ t  ?0 n+ v2 x, ^7 P7 @0 `
+ G( r4 B  d# E. |! Nf) 浏览器和web服务器端的ajax交互以extjs的direct为主;# |0 ?! A) {  A

' |9 E6 g3 `0 l3 ]) {1 pg) 为了增强用户体验,需统一界面风格和配色标准。
% J5 c  }. K: G: ~0 N  `8 x1 L& Z6 |. X) e0 v

$ D  x& Y: t8 G% N' h) T+ d2 c6 W# c3 V* t
此外,诸如“分页查询的适用场景”、“存储过程的引入原则”、“事务控制的指导意见”、“安全通讯的备选方案”之类的指导意见库也需要不断的完善和丰富。1 S; w: s$ L- W$ V  }7 F, h. X5 \

; M, l( U" l# l( f! D2 p
/ a+ [1 j; b+ @7 D5 t% }* K5 q
  O4 n* ?, I- E1 q: g& `' n问题四:平台选用迭代的方式开发,模块的优先级应如何定义?
7 P& o; v' ]# k# @- F; \ABC平台的用户是业务部门,基于ABC平台开发的应用系统才会面对真正的终端用户,为了“在达成最终用户要求的基础上降低个人工作强度”,实施工程师必然会综合考虑最终用户的“应用级”需求,传递到平台研发这里,形成了平台开发要求。这里我没有使用“需求”,因为用户提出的永远都是要求,需求是由项目组相关人员分析获得的(个人观点),提交用户确认的需求分析报告中已经包含了功能优先级的定义。
* {- J# o: R& q7 ]0 i% e: o5 C5 K9 B: ^$ a! ?
由于着眼点的不同,开发团队和用户理想中的功能模块优先级很难获得统一。用户采用“哪个先上线带给我的好处最多”来判断,而开发团队则用“如何安排次序最能节约研发成本”来评判,最终的选择结果一般是二者相互妥协的折中。
  Y; Z1 A- d( R0 ?8 n% n) {. U: w( h5 R& }* P7 t: }
对于ABC平台的研发,我觉得可以尝试考虑“最小可用版本包含什么功能”、“再扩大一下范围呢”、“先不做aa,直接做bb,能否满足可用要求”这几个问题来定义模块优先级。显而易见,业务部门眼里的“最小可用版本”应该不会包括系统服务总线,这就是冲突,需要讨论,需要权衡。
7 L) ?9 \2 D* o7 R6 @4 g& t- ~+ \% K: m5 k
本节关键词:权衡。4 q! l1 N7 m) V; y8 Z" |+ [. T+ l- C8 D
# t' X" _* V, m+ K7 H3 }  N' g
) O* b4 a6 H( Q, Y

0 x$ a5 X4 |- J7 l1 p问题五:针对平台模块,可否抽象出统一的作业指导说明书?
! k7 p, R; A: x( P6 J! f) ?9 g作为具备多年实践经验的软件工程师,我们都熟悉软件工程中定义的开发方法和开发流程,然而直接用作平台模块的作业指导却显得过于遥远,虽然我们理应遵循软件工程的各项原则,但我觉得依然需要一个可行性较强的作业指导说明书作为补充,或称之为操作指南。
. L2 E: Z5 r/ R! d( d/ d' G% t8 i0 P- x) ?2 P
我尝试着为这个操作指南罗列了如下条目(当然,若真的施行,还是需要研发团队集体的力量):
: J2 ~. J( q5 v  ?* y4 y* e
& I6 ~0 z$ L* Y1) 模块需设置“产品经理”之类的岗位角色,对整体功能和研发路线负责;& \6 P$ V; j: \0 z2 E# P# p
$ {# E* N2 G# K0 B: E& u$ F+ N
2) 产品经理主导需求调研和分析过程,是需求规格说明书的责任人;
3 b) t0 B  f1 r6 k. O2 N7 d- _) j3 a$ x9 g" V* L
3) 模块的技术架构遵循统一的平台标准;3 J2 _* A! z3 y2 i) y
8 b" S, l! \* z& ^2 ]; u
4) 模块首先确定其功能定位和设计目标;9 s. Q9 D9 C5 l0 N1 q( Y
; A) d% k. h1 a0 g, C  a3 X
5) 模块第二步要明确的是关联系统和交互接口;
4 }' x) ], z* _3 [% K- Y- w/ c5 v* M; p2 x2 D
6) 将模块需求分类,为非通用需求设置辅助工具单独设计;
: W  i( v8 w. Y0 L( _0 R- O' V- a  B( Q+ g, _/ o# u
7) 模块内部功能细分形成逻辑独立的子模块,按实际需要提供剥离支持;1 R9 v2 I! G2 y3 g. A
3 w! A8 V5 F# w& `3 ]7 O
8) 外部接口的定义和伪装实现优先于内部设计;
# J; @4 o/ U1 I9 P3 l$ u/ ]/ K/ J
! d2 w# v1 s0 m" G8 O# r9 I本节关键词:指南。
" T" G6 G; b; S; t6 h$ ~! k
/ F* c" [- q5 i: Q, B' ^" a; Q$ t: p) K

5 _  S; w/ T6 F, N问题六:平台模块可否委托研发?如何施行?6 H6 M: u& ]' d9 n) l: ^( A
对于不能直接产出利润的平台研发,公司的资源总是紧张的,人手总是不足的,除了补充人员之外,我们可否选择委托研发呢?这里我没有使用“外包”,因为委托研发除了外包,还有“交由业务部门自行设计开发”的一层意思,而且我个人认为编码实现外包是可以的,而系统设计最好在公司内部实现,至于具体模块的产品经理(Product Owner)必须是内部人员。2 V6 h8 f1 O" m. h* w2 ?; R  R- D
+ g4 n6 @1 t: ~3 k
委托研发的核心思想是研发任务“分流”,而工作“分出去”的重点在于如何“收回来”,这就需要制定一套评价体系(就是问题三的输出结果)用作任务回收时的验收标准,向业务部门分派任务时申明验收标准(他们无须理解水渠的规划,只需保证挖的坑符合特定要求即可)并附带作业指导说明书(诸如“如何挖坑更省力”、“论铁铲和䦆头在挖坑工作中的效用”之类的东西),只要业务部门遵循这些规范进行开发,最终就可以顺利地纳入ABC平台达到“水到渠成”的效果。
5 }( e" w$ ^) o4 F$ T+ T  g; S) K  V0 s# O
本节关键词:分流。3 q+ O8 \$ a7 b# l& N) d8 z

% ]/ M: \. G. N: ~! v8 M' U4 L0 e' \7 M4 |
3 B' B( U1 x8 Q3 B" V4 _" f
问题七:ABC平台研发的产出是什么?除了平台本身还应该有什么?, U: u; a% F1 {) c8 K
虽然我们当前的主要任务是研发一个切实可用的优秀平台,但本着效用最大化的原则,还应当考虑一下平台研发的附带产出。对于这个问题,我首先想到的是“锻炼队伍”,后来又归纳出了“求渔”一词。  d3 s$ D) l( k. R* R

/ `, ]7 g1 K4 K2 @/ n9 g: a  Y$ S话说“授人以鱼不如授人以渔”,这是从赠予方的角度解读的,假设我们是接受方呢?于是想到了“求渔”一词,然后ABC平台在我眼里就成了一条鱼,如果通过这次捕鱼(不挖坑修渠,改结网捕鱼了)的经历进行有意识地总结,提升到渔的境界岂不更好?我们总结一套适合公司现状的行之有效的系统开发规范,新成员加入时首先参加流程培训,而后即可以最快的速度融入团队开发,虽然这些已经超出了ABC平台的范畴,但我还是觉得非常有必要分析讨论一下。* `' K0 {( S- J2 U: o
* Q! j2 x- i7 ^6 e
本节关键词:求渔。
1 K2 v1 W5 u1 F* Q" n
; N' ~) \: o9 T7 Q; [) y* `# P3 z; M5 |/ f! |% F
5 k8 T% _" i+ J, j: ]
最后总结一下,我对平台研发的个人想法主要集中在“定位”、“协作”,“标准”、“权衡”,“指南”、“分流”,“求渔”七个关键词上,或有词不达意之处,仅供参考,欢迎拍砖。; y2 T0 K! F4 Y* G1 z+ f) x

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-7 13:16 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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