NClay .Net轻量开发框架简介
NClay的前身是HFSoft它是一个轻量级的.Net开发框架,框架现在主要由数据持久化组件和MVC组件两大部分组件。在这里主要给大家介绍MVC组件,使用NClay的MVC组件进行WEB应用程序开发不仅可以方便高效率的写Asp.net应用程序的同时还能规范程序结构体系。直接下来通过一个简单的WEB应用程序来介绍一下NClay.MVC组件的处理结构。
NClay.MVC处理结构
在使用NClay的MVC组件进行开发时必须以接口的方式制定输入/输出的业务逻辑描述,Page根据情况需要实现一个或多个逻辑接口;当用户请求相关Page时NClay会自动进行实例创建并绑定数据成员值传进Controller的Action Method中进行处理。
产品编辑功能NClay处理结构
输入/输出逻辑接口的定义
public interface ICategoriesList
{
string CategoryName
{
get;
set;
}
IList<Category> Items
{
get;
set;
}
}
public interface IProductLoad
{
string ID
{
get;
set;
}
Product Item
{
get;
set;
}
}
public interface IProductModify
{
Product Item
{
get;
set;
}
}
逻辑处理控制器代码
[Controller]
public class ProductController
{
public void Modify(IProductModify view)
{
if (StaticFunction.IsEmpty(view.Item.ProductID))
{
Expression exp = new Expression();
exp &= DB.Product.ProductName == view.Item.ProductName;
if (exp.CountOf<Product>() > 0)
{
throw new Exception("同一名称的产品已经存在!");
}
view.Item.ProductID = Guid.NewGuid().ToString();
DaoContext.Add(view.Item);
}
else
{
DaoContext.Edit(view.Item);
}
}
public void Load(IProductLoad view)
{
if (!StaticFunction.IsEmpty(view.ID))
{
view.Item = DaoContext.Load<Product>(view.ID);
}
}
[Controller]
public class CategoryController
{
public void List(ICategoriesList view)
{
Expression exp = new Expression();
if (!StaticFunction.IsEmpty(view.CategoryName))
{
exp &= DB.Category.CategoryName.Match(view.CategoryName);
}
view.Items = exp.List<Category>();
}
VIEW的定义
在NClay中虽然都是使用传统的WebForm页面,但有一个非常大的改变就是没了对应的Page.cs文件,取而代之的是一个实现相关逻辑接口的视图对象。由于没有了状态和事件等特性,或多或少会给熟悉种编写方式的朋友感到失望,虽然是这样但确并不影响NClay所带的方便和灵活性。
[NClay.MVC.FormMapper("~/FrmProductModify.aspx", typeof(Sales.Controllers.ICategoriesList))]
[NClay.MVC.FormMapper("~/FrmProductModify.aspx", NClay.MVC.ActionType.GET, typeof(Sales.Controllers.IProductLoad))]
[NClay.MVC.FormMapper("~/FrmProductModify.aspx", NClay.MVC.ActionType.POST, typeof(Sales.Controllers.IProductModify))]
public class ProductModify:SaleBaseImpl,Sales.Controllers.ICategoriesList,
Sales.Controllers.IProductLoad,Sales.Controllers.IProductModify
{
#region ICategoriesList 成员
private string mCategoryName;
public string CategoryName
{
get
{
return mCategoryName;
}
set
{
mCategoryName = value;
}
}
private System.Collections.Generic.IList<Sales.Model.Category> mItems =
new System.Collections.Generic.List<Sales.Model.Category>();
public System.Collections.Generic.IList<Sales.Model.Category> Items
{
get
{
return mItems;
}
set
{
mItems = value;
}
}
#endregion
#region IProductLoad 成员
private string mID;
public string ID
{
get
{
return mID;
}
set
{
mID = value;
}
}
private Sales.Model.Product mItem = new Sales.Model.Product();
[NClay.MVC.Bind("item")]
public Sales.Model.Product Item
{
get
{
return mItem;
}
set
{
mItem = value;
}
}
#endregion
public override void Completed()
{
base.Completed();
if (Context.Request.RequestType == "POST")
{
if (Error == null)
Context.Response.Redirect("FrmProductList.aspx");
}
}
}
在ProductModify的视图对象分别定义了几个服务描述,在任何请求下调用ICategoriesList逻辑处理、在GET请求下调用IProductLoad逻辑处理和在POST请求下调用IProductModify逻辑。由于视图对象也是完全和page隔离,因此视图对象也可以接受多个page请求的服务处理。
到这里大家应该能够大概了解NClay的MVC处理结构体系,如果想进一步了解其程序的运行结果可以下载相关程序代码。