方法论 - HeavyYuan/A-CD-Record-Management-System GitHub Wiki
数据唯一性标识
数据A要区别于数据B,特征值的个数?
一个特征值就可以区分开,还是要多个特征值联合区分?
代码逻辑覆盖的的场景应该有简单到复杂,前期简单场景可以一个特征值标识一个数据
后期根据用户需求来决定是否有必要重构修改,增加复杂场景。
eg: 本项目中,track的list组成一个record, record的list组成一个record_list
track和record如下:
typedef struct Track{
struct list_head list;
char *title;
char *style;
}Track;
typedef struct Record{
struct list_head list;
char *title;
char *artist;
int track_count;
struct list_head track; //track的链表
}Record;
一个Record有title,artist,track_count三个特征值来确定唯一性。 前期只由title一个特征值来确认Record的唯一性,后期如果有需要,可以增加到3个特征值,所以到时就会出现title相同的Record
而track的的唯一性确认,不但由其本身的特征值构成,而且还与其所属record相关 即不同record可能会有同名(title),同风格(style)的track。
就本项目:前期record有title一个特征值确定唯一性,track由title、style,和其所属record来确认
分层设计
本项目分为 数据层、方法层、控制层
即"控制层"通过“方法层”来操作“数据层”
控制层负程序的行为控制,其会调用方法层来实现具体逻辑的执行。
方法层提供各种方法接口,如:用户数据获取方法,代码数据的生成,UI界面生成等
数据层定义程序运行需要的数据
实例说明:
项目中,在添加record时
typedef struct Record{
struct list_head list;
char *title;
char *artist;
int track_count;
struct list_head track; //track的链表
}Record;
用户数据是record的title, artist
代码数据就是结构体Record
Record并非直接由用户输入,而是控制层调用方法层做的用户数据到代码数据的转化。
编码实现
对于分层的代码逻辑,在代码实现时,从本项目看
在构建commit:f9355244afb353442ed2dc433e08760252f3c959时,修改最多的是方法接口,其会在项目推进过程中,随着需求迭代而变化。
比如增减参数,新功能增加,冗余剔除,数据唯一性标识变动等
在具体编码实现时,建议从两头向中间开发,一头是底层基础能力(基础数据,链表增删查找),一头是UI实现(体现的是用户需求)。
中间就是我们的“方法”层,类似中间件。
一般底层基础能力不会改变,UI紧贴用户,所以应该常常变动,UI的变动带动方法层的变动。