作者laechan (小太保)
看板mud_sanc
标题[程式] 中型系统使用MAGI架构
时间Tue Nov 13 18:39:18 2007
以家族系统为例, 采用 MAGI 架构, 分为三个部份..
1.CASPER - 基本函数库
2.MELCHIOR - 副程式, 应用函数
3.BALTHASAR - 外附程式(如族徽)
要撰写一般中型系统, 以上述做为基本的分类方式就足够了,
家族系统总行数约 4xxx 行, CASPER 约 1200 行, MELCHIOR
约 1100 行, BALTHASAR 约 700 行, 剩下的 1xxx 行即家族
所, 也就是实际上下指令执行家族功能的地方.
分类的好处在於, 程式的本体如果行数过多的话, 适当的分类
可以将程式做适当的切割, 让程式本身的可读性增加, debug
起来也方便.
简单的中型系统, 例如商店系统, 若以上述的分类..
1.CASPER - 可以定义一些商品数值读取的函数
2.MELCHIOR - 可以设一些收钱的函数, 商品列表副程式,..
3.BALTHASAR - 打工即现行商店的外附程式
中型系统的撰写步骤, 并没有一定的规则, 我的做法是, 例如
撰写商店系统, 一般是先写一个简易版的商店, 完成後将其切
割为两部份, shop1 及 shop2, shop2 继承 shop1, 而 shop1
就是专门存放基本的行数之用.
切割完成并 debug 後, shop2 即为可继承用之物件, 这时就可
以撰写实体的商店物件. 而将来想加入其它功能时, 就用外附
的方式附加, 如撰写 shop_work.c, 然後让 shop2 去 inherit
它即可.
BALTHASAR 的写法有二..
一、继承式
二、呼叫式
继承式..
inherit SHOP1;
inherit SHOP_WORK2; // 同时继承此两者
或者让 SHOP_WORK2 去 inherit SHOP1, 然後 SHOP2 就继承
SHOP_WORK 也可以...
MAGI System
CASPER
/ \
MELCHIOR-----BALTHASAR
後者比较接近上述的架构.
呼叫式..
int shop_work()
{
SHOP_WORK->shop_work();
return 1;
}
即使用呼叫的方式, 而非继承的方式. 优点是 shop_work
做变动时, 只需 update shop_work 本身即可, 无需同时
去 update 所有的商店.
但缺点是, 玩家每 work 一次, 就会做一次外部呼叫.
不过考量到未来维护的方便性, 以前者的做法较好, 另一
个主要考量, 即 work 本身并不存在可能被频繁呼叫的问
题.
以上, 提供给想撰写中型系统者参考, 大抵上一般都是先
弄出雏形, 然後分割以便於维护、扩充及 debug, 之後才
是扩充的部份. 在扩充的当中若发现程式行数有可能过多
时, 就可以撰写独立的物件让原先的程式本体去另外继承
或者呼叫.
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.146.140.32
1F:→ laechan:附带一提, 国家系统就类似数个中型系统去做并接 11/13 18:43