您的位置:首页 > 编程语言 > ASP

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

2015-07-26 13:44 639 查看
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开发框架下载

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: