如果――BO里的字段都改成是string――会怎样?
BO里的字段总会有各种类型:int、DateTime、string、float、decimal等。最近和个朋友正在架构公司的底层平台,朋友坚持所有的字段都用字符串来表示。小弟我总觉得这样做不妥,和朋友争论了一番。原来正常一个类变了个样:
class EmployeeInfo class EmployeeInfo
{ {
int id; string id;
DateTime birthday; string birthday;
string name; string name;
decimal baseSalary; string baseSalary;
int departmentID; string departmentID;
} }
我的理由是:1、运行性能会下降,当我们进行数学表达式,id值定位或查找,就要进行字符串到具体类型的转换。系统的主健全部是用int型流水号,因此数据载入内存后,定位查找时如果用字符串判断相等肯定比整型来得慢很多。2、空间的占用会加大,一个int32整数只占4 bytes,而一个百万级的数字字符串就要占7 bytes,要命的是C里面全部是unicode的字符串,相当于占14 bytes。如果将十万笔的数据载到内存,这样的空间占用我想应该是可怕的。
朋友理由是:1、不见得会降低性能,相反在企业应用程序中,大量的数据只是做显示之用,反而会提高性能。因为数据从数据库读取到本地,需要将类型转成是具体类型,然后在显示到界面肯定是要将其转成字符串才能显示到表现层。如果都是字符串,那么就无需进行任何转换。如果要进行逻辑运算时再转也不迟。况且数据库应用程序,如果要性能,很多算法写成存储过程;2、架构变得很简单,由于我们的架构里支持动态表结构,因此必须通过反射的机制在读取数据,显示数据里进行相应类型的转换。很多地方都要处理类型的问题(的确很复杂,我研究了三周,做了大量的比较,理出了动态表结构的模型,其中大量时间在研究类型的运行时动态处理的问题)。如果直接用字符串,一切变得很简单。
最后我决定接受他的做法,理由只有一个:他开发Web应用程序多年了,以用此方式做过N套系统,运行都不错。小弟以前开发Game,应用程序开发很多都是向他取经的。我说服自己是我自己对性能太看重了,做应用程序应该以项目进度为主,不能太专牛角,而且性能可以通过要求客户的服务器配置来提高。
发贴于此,希望诸位前辈能对此做法给些点评。