Maticsoft.Framework for Asp.Net框架应用实例(一)

来源:互联网 发布:windows跳板机搭建 编辑:程序博客网 时间:2024/05/17 22:37



Maticsoft.Framework,短小精悍,超级实用,用于解决操作数据库,解决程序重复劳动,具有高度灵活扩展性。

使用它后甚至可以抛弃代码生成工具(它只解决数据新增,删除,
修改,分页一旦数据库字段发生改变所有方法都得重新生成!!那是一件多么麻烦的事!!而此框架正可以解决此问题)

本人.NET开发8年,多年参于国家部委项目开发,积累了很多实战经验,此开发框架经过多年项目实战已经具备实用价值,且非常适合中小型企业网站系统使用。

系统极为精简,容易上手,可以极大的减轻开发人员工作量!!

通常开发人员人修改数据库字段后,得调整数据层(或用代码工具重新生成),极为繁索,而此框架可以避免这种工作,而只需要“重构”Model相关属性即可。

如CRUD操作,获取实体列表,分页等都封装,且支持ODBC,也就是说可以支持很多数据库类型,对于高手而言可以经实现扩展。

系统中包含简单事件处理程序,及担供一套供跨平台应用,及javascript调用方法等


框架使用方法:
1、新建空解决方案,并新增Model,IDAL,DAL,BLL类型为类库
2、在DAL和BLL引用Maticsoft.Framework.dll
DAL中引用IDAL,BLL引用IDAL和DAL

3、复制下载的包Maticsoft.Framework.zip中相关目录中
BaseManager.cs复制到BLL中
BaseDao.cs复制到DAL中
IBaseDao.cs复制到IDAL中
PrimaryKey.cs复制到Model中

4、新增Model,T_Subject.cs文件,和数据库对应

5、新增T_SubjectDao.cs在DAL中,并修改类头一行为,使类继承自BaseDao,这样T_SubjectDao就包含了所有操作数据库的行为方法
如Add,Update,GetDataList,GetTModel方法等,如果这些方法还不够用,就需要在这个类中增加数据层方法,如下

public partial class T_SubjectDao : BaseDao<T_Subject>{public T_SubjectDao(){}public List<T_Subject> GetSubjectListByQuesType(int ques_type){return this.GetModelList("","","略。。。","");}}


6、创建业务层T_SubjectManager.cs存于BLL中
public partial class T_SubjectManager : BaseManager<T_Subject>{private readonly DAL.T_SubjectDao dal = new DAL.T_SubjectDao();public override IDbTransaction Transaction{get{return base.Transaction;}set{//如果该表需要操作多个表,即多个DAL,则只需要在这里加上//this.用户表Dal.Transaction = value;这样这里的事务对象就支持多表操作了this.dal.Transaction = value;base.Transaction = value;}}public T_SubjectManager(){ }略........}



到此为止t_subject表的方法都实现完成,下面可以操作数据库了

//添加记录protected void Button2_Click(object sender, EventArgs e){    T_SubjectManager subjectManager = new T_SubjectManager();    int ret = subjectManager.Add(new Model.T_Subject()    {        subject = "测试题目",        userid = "test"    });    //ret为返回的自增id}//修改记录protected void Button3_Click(object sender, EventArgs e){    T_SubjectManager subjectManager = new T_SubjectManager();    //系统只修改subject字段,其它字段则不修改    subjectManager.Update(new Model.T_Subject()    {        subject = "测试题目,修改"    }, string.Format("id=1"));}//删除记录protected void Button4_Click(object sender, EventArgs e){    T_SubjectManager subjectManager = new T_SubjectManager();    //系统只修改subject字段,其它字段则不修改    subjectManager.DeleteRecord(string.Format("id=1"));}

多业务对象事务支持(多个实体表):
public void TestTransaction(){    IDbTransaction stran = this.dal.BeginTransaction();    try    {        this.Transaction = stran;        for (int i = 0; i < 3000000; i++)        {            var subject = new T_Subject            {                answer = "A" + i.ToString(),                book_class_id = "",                c_b_type = 0,                ques_level = 7,                ques_type = 1,                subject = string.Format("【{0}】测试数据【{0}】", i),                userid = "test",                zscore = 5            };            this.dal.Add(subject);        }        this.dal.Commit();    }    catch (Exception)    {        this.dal.Rollback();        throw;    }    finally    {        this.Transaction = null;    }}

分页支持,此方法支持多表关联查询,可以将表名设为【 t_suject t left join t_user u on t.userid=u.u_id 】:List<t_subject> listSubject = GetModelList("t_subject","*", "条件","oder by ques_type asc", 1,100);DataSet ds = GetDataList("t_subject","*", "条件","oder by ques_type asc", 1,100);另外,我们还提供一套,文件上传存模式,(待开源中):
if (Directory.Exists(tmpDir)){    string path1 = string.Empty;    string path2 = string.Empty;    wcf.GetFilePath(this.BodyPath, adr, ref path1, ref path2);    ArrayFileInfo file = null;    if (file == null)    {        file = new ArrayFileInfo();    }    file.SetBody(false, path1, path2, adr.Row);    foreach (ListItem item in this.fileList.Items)    {        string itemFile = Path.Combine(tmpDir, item.Text);        if (File.Exists(itemFile))            file.AddFile(itemFile);        else            file.AddFile(file.BodySubPath + item.Text, EditType.Normal);    }    if (file.FileList.Exists(w => { return w.fType != eType.None; }))    {        adr.Row.Add("product_image", file);    }}




//保存数据,并根据tmpDir和数据行信息保存文件

wcf.FileSave(this.CurrentLevel, adr, this.eMode, out error, tmpDir);




以及下载文件等都有一套专门管理方式,可随着实体对象Model一同保存到数据库中,文件和条目数据不需要再分开管理非常便捷。
此方式成功应用于档案和文档管理系统中。

有多个网站,A,B,D三个网站实现的是一个独立功能,但是用户是一站式登录的,并且图片等用户自定义上传数据是共享的。
那么如何实现呢?每个系统上传的文件应该存于某一个特定的目录,这个目录是被三个系统所共享的。利用框架Maticsoft.Framework.VirtualFileProvider就可以轻松实现!!


大家都知道Asp.net WebForm开发方式是非常好的面向对象开发模式,WebControls开发复杂门槛比较高(代码容易保护,可以编译成DLL),
UserControls则非常好用且开发成本低,但是代码不容易保护,也就是用户控件不可以随程序集一同发布。现在告诉大家一个好消息,
使用Maticsoft.Framework可以实现对UserControls封装,可以很好的保护代码,使用方法如下:
void Application_Start(object sender, EventArgs e){    //其中WebControls.dll中包含了用户开发的用户控件    ZipFileVirtualPathProvider prov = new ZipFileVirtualPathProvider(Server.MapPath("bin\\WebControls.dll"));    HostingEnvironment.RegisterVirtualPathProvider(prov); }
调用方法:
aspx页面引用
方法1:会报语法错误,但可以正确运行
<%@ Register TagPrefix="uc1" TagName="WebUserControl" Src="WebControls.Controls.WebUserControl1.ascx" %><uc1:WebUserControl ID="WebUserControl1" runat="server"></uc1:WebUserControl>
或者使用代码动态加载,没有语法错误,但需要手动编写代码,如下:
WebControls.Controls.WebUserControl1 control1 = this.LoadControl("WebControls.Controls.WebUserControl1.ascx")as WebControls.Controls.WebUserControl1;this.PlaceHolder1.Controls.Add(control1);

示例数据库脚本:
create table t_subject(  id int自增,  book_class_id int,  c_b_type int,  ques_type int,  subject varchar(250),  answer varchar(50)  ques_level int  zscore int,  userid varchar(50));



****************************************************************************************

框架免费使用,有任何问题,请加qq群:26055929探讨!

如果你想学习框架和扩展框架,或想了解实现方法,想要【源码】的欢迎和我联系!!

邮箱:paaple@foxmail.com

作者:paaple 2015-07-26 @杭州滨江


源码下载:Maticsoft.Framework开发框架下载



****************************************************************************************





0 0
原创粉丝点击