提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2009-04-03 10:04:29.000|阅读 619 次
概述:在vs.net里提供一个IVsSingleFileGenerator接口可以方便地为项目文件生成附属文件,如刚才那文章提到的根据XML文件自动生成一个附属的C#代码文件
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
看到这标题的朋友可能搞不懂到底在搞什么,不过不要紧有兴趣的朋友可以先了解一下IVsSingleFileGenerator到底是用来做什么用的;在vs.net里提供一个IVsSingleFileGenerator接口可以方便地为项目文件生成附属文件,如刚才那文章提到的根据XML文件自动生成一个附属的C#代码文件;当然这个IVsSingleFileGenerator并不只是针对XML文件,可以是随便为任何项目文件生成附属文件你只要在文件属性中设置相关Custom Tools就可以了.
为什么在这里我提出在代码文件的基础上再生相关的代码附属文件呢,为什么不直接在原代码文件写完整就可以了;原因很简单因为手写代码是没有电脑来得快,最主要一个原因是基于XML的IVsSingleFileGenerator在某方面不好所以才采用基于代码文件的方式作为代码描述模板.用XML描述在现情况碰到的问题,在我的数据持久层里是采用XML结合IVsSingleFileGenerator来生成相关实体类的.
内容大概如下:
<SmarkDatamodels xmlns="//SmarkData.cn/model.xsd" >
<Class Name="Customer" Table="vp_Customer">
<ID Name="CustomerID" Type="System.Int64"/>
<Property Name="UserName" Type="System.String" Comment="用户名"/>
<Property Name="UserPWD" Type="System.String" Comment="用户密码"/>
<Property Name="CustomerType" Type="System.Int32" Comment="客户类型"/>
<Property Name="CustomerName" Type="System.String" Comment="自定义名"/>
<Property Name="Sex" Type="System.Boolean" Comment="性别"/>
<Property Name="Region" Type="System.String" Comment="地区"/>
<Property Name="City" Type="System.String" Comment="城市"/>
<Property Name="IDCard" Type="System.String" Comment="身份证号"/>
<Property Name="EMail" Type="System.String" Comment="电子邮件"/>
<Property Name="Phone" Type="System.String" Comment="电话"/>
</Class>
</SmarkDatamodels>
VsSingleFileGenerator会根据XML生成以下相关实体:
/// <summary>
/// 用户名
/// </summary>
public virtual string UserName {
get {
return this.mUserName;
}
set {
this.mUserName = value;
this.EntityState.FieldChange("UserName");
}
}
/// <summary>
/// 用户密码
/// </summary>
public virtual string UserPWD {
get {
return this.mUserPWD;
}
set {
this.mUserPWD = value;
this.EntityState.FieldChange("UserPWD");
}
}
/// <summary>
/// 客户类型
/// </summary>
public virtual int CustomerType {
get {
return this.mCustomerType;
}
set {
this.mCustomerType = value;
this.EntityState.FieldChange("CustomerType");
}
}
VsSingleFileGenerator有个不好的地方就是当主文件修改后会重新生成附属文件,这样就导致你无法修改代码文件.如果想为某些属性成员添加Attribute来处理一些功能基本是没办法的.
如添加成员数据验证:
[NotNull]
[Length("5","16","用户名长度必须在5-16个字符内!")]
public string UserName
{
get;
set;
}
即使能解决VsSingleFileGenerator生成附属文件冲突问题;但也要面对另一个问题,就如何扩展XML来处理这些扩展呢,添加XMLSchema扩展描述规则,重写VsSingleFileGenerator代码生成部份;这样下来没多久我估计自己会疯了....
实际情况添加不同Attribute来扩展辅助功能是很常见的事情,就一个验证来说根据实际情况就有很多情况,类构造方式也不一样.就针对这些情况来扩展XMLSchema和重写VsSingleFileGenerator带来的工作量就不用说了,还有一个问题就是XML并不能提供类型编译的保证这样对XML的质量是很难保证.
经过了一段时间的思考发现为什么不直接用代码作为原模板呢,这样就能得到IDE的支持,强在编译器的支持下保证类型输入规则的有效性.以下是本人实现的简单生成模型:
[Table]
interface IUser
{
[ID]
string UserName { get; set; }
string BirthDate { get; set; }
string Region { get; set; }
string Remark { get; set; }
}
生成的相关代码
[Table]
[Serializable]
public class User:Smark.Data.Mappings.DataObject
{
[ID]
public string UserName { get{ return mUserName;} set{mUserName=value;EntityState.FieldChange("UserName");} }
private string mUserName;
public static Smark.Data.FieldInfo userName = new Smark.Data.FieldInfo("User","UserName");
public string BirthDate { get{ return mBirthDate;} set{mBirthDate=value;EntityState.FieldChange("BirthDate");} }
private string mBirthDate;
public string Region { get{ return mRegion;} set{mRegion=value;EntityState.FieldChange("Region");} }
private string mRegion;
public string Remark { get{ return mRemark;} set{mRemark=value;EntityState.FieldChange("Remark");} }
private string mRemark;
}
}
这样的话即使我们如何给属性添加Attribute都不会带来代码上的修改,VsSingleFileGenerator只对属性作一个模板生成其他内容搬过来就可以了:)
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:博客园



接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站