NClay .Net轻量开发框架简介

       NClay的前身是HFSoft它是一个轻量级的.Net开发框架,框架现在主要由数据持久化组件和MVC组件两大部分组件。在这里主要给大家介绍MVC组件,使用NClayMVC组件进行WEB应用程序开发不仅可以方便高效率的写Asp.net应用程序的同时还能规范程序结构体系。直接下来通过一个简单的WEB应用程序来介绍一下NClay.MVC组件的处理结构。

NClay.MVC处理结构

      

       在使用NClayMVC组件进行开发时必须以接口的方式制定输入/输出的业务逻辑描述,Page根据情况需要实现一个或多个逻辑接口;当用户请求相关PageNClay会自动进行实例创建并绑定数据成员值传进ControllerAction 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请求的服务处理。

       到这里大家应该能够大概了解NClayMVC处理结构体系,如果想进一步了解其程序的运行结果可以下载相关程序代码。

下载程序代码

posted on 2007-07-02 17:45  henry  阅读(3893)  评论(7编辑  收藏  举报

导航