zoukankan      html  css  js  c++  java
  • 三层与mvc

    第一部分

    模型层:

    (1)实体属性   数据库字段

    (2)数据库上下文类  dbContext 封装ado.net

    第二部分

    数据访问层

    说明,每一张表对应有crud综合分析可以得知区别在于对应的类型不同以及一些参数不一样,

    故考虑,对于类型的不同使用泛型进行封装,

              对于不同的参数使用父类定义虚方法子类重写父类的方法解决。

    因此,提出一个公共类出来:

    using System;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Linq.Expressions;
    using Model;
    
    namespace Dal
    {
        //类型不一样可以使用泛型封装,对于某些参数不一样可以在父类中定义为虚方法在子类中重写
        public abstract partial class BaseDal<T>//泛型类
            where T : class//class标识为引用类型
        {
            DbContext dbContext = new MyContext();//生成数据库
    
            public IQueryable<T> GetList(int pageSize, int pageIndex)//查询所用
            {
                return dbContext.Set<T>()
                    .OrderByDescending(GetKey()) //u=>u.Tid
                    .Skip((pageIndex - 1) * pageSize) //3,5   10
                    .Take(pageSize);
            }
    
            public T GetById(int id)//查询一条
            {
                return dbContext.Set<T>()
                    .Where(GetByIdKey(id))
                    .FirstOrDefault();
            }
    
            public int Add(T bookType)//添加
            {
                dbContext.Set<T>().Add(bookType);
                return dbContext.SaveChanges();
            }
    
            public int Edit(T bookType)//修改
            {
                dbContext.Set<T>().Attach(bookType);
                dbContext.Entry(bookType).State = EntityState.Modified;
                return dbContext.SaveChanges();
            }
    
            public int Remove(int id)//删除
            {
                var bookType = GetById(id);
                dbContext.Set<T>().Remove(bookType);
                return dbContext.SaveChanges();
            }
    
            public abstract Expression<Func<T, int>> GetKey();  //参数不一样的定义
            public abstract Expression<Func<T, bool>> GetByIdKey(int id);
    
            public int GetCount()
            {
                return dbContext.Set<T>().Count();
            }
        }
    }

    具体表的crud:

    (1)

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    using System.Threading.Tasks;
    using Model;
    
    namespace Dal
    {
        /// <summary>
        /// 其中一张表的crud操作
        /// </summary>
        public partial class BookInfoDal:BaseDal<BookInfo>
        {
            public override Expression<Func<BookInfo, int>> GetKey()//重写父类
            {
                return u => u.BookId;
            }
    
            public override Expression<Func<BookInfo, bool>> GetByIdKey(int id)
            {
                return u => u.BookId == id;
            }
        }
    }

    (2)

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    using System.Threading.Tasks;
    using Model;
    
    namespace Dal
    {
        /// <summary>
        /// 另外一张表的操作
        /// </summary>
        public partial class BookTypeDal : BaseDal<BookType>
        {
            public override Expression<Func<BookType, bool>> GetByIdKey(int id)
            {
                return u => u.TypeId == id;
            }
    
            public override Expression<Func<BookType, int>> GetKey()
            {
                return u => u.TypeId;
            }
        }
    }

    第三部分  业务逻辑层

    对数据访问层的进一步封装

    同样有一张基础类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Dal;
    
    namespace Bll
    {
        public abstract partial class BaseBll<T>
            where T:class 
        {
            private BaseDal<T> dal;
            public abstract BaseDal<T> GetDal();
    
            public BaseBll()
            {
                dal = GetDal();
            }
    
            public IQueryable<T> GetList(int pageSize, int pageIndex)
            {
                return dal.GetList(pageSize, pageIndex);
            }
    
            public T GetById(int id)
            {
                return dal.GetById(id);
            }
    
            public bool Add(T t)
            {
                return dal.Add(t) > 0;
            }
    
            public bool Edit(T t)
            {
                return dal.Edit(t) > 0;
            }
    
            public bool Remove(int id)
            {
                return dal.Remove(id) > 0;
            }
    
            public int GetCount()
            {
                return dal.GetCount();
            }
        }
    }

    具体的表

    (1)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Dal;
    using Model;
    
    namespace Bll
    {
        /// <summary>
        /// 其中一张表
        /// </summary>
        public partial class BookInfoBll:BaseBll<BookInfo>
        {
            public override BaseDal<BookInfo> GetDal()
            {
                return new BookInfoDal();
            }
        }
    }

    (2)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Dal;
    using Model;
    
    namespace Bll
    {
        /// <summary>
        /// 另外一张表
        /// </summary>
        public partial class BookTypeBll:BaseBll<BookType>
        {
            public override BaseDal<BookType> GetDal()
            {
                return new BookTypeDal();
            }
        }
    }

    第四部分  展示层  UI  有mvc组成

    (1)controller  其中一张表

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.Mvc;
    using Bll;
    using Model;
    
    namespace UI.Controllers
    {
        public class BookInfoController : Controller
        {
            BookInfoBll bookInfoBll=new BookInfoBll();
            BookTypeBll bookTypeBll=new BookTypeBll();
            //
            // GET: /BookInfo/
    
            public ActionResult Index()
            {
                //ViewData.Model = bookInfoBll.GetList(10, 1);
                return View();
            }
    
            public ActionResult LoadList(int pageSize,int pageIndex)
            {
                var list= bookInfoBll
                    .GetList(pageSize, pageIndex)
                    .Select(u=>new//select  使用匿名对象筛选一部分需要的数据(其中不能出现导航属性)
                    {
                        Id=u.BookId,
                        Title=u.BookTitle,
                        TypeTitle=u.BookType.TypeTitle
                    })
                    .ToList();
    
                int rowsCount = bookInfoBll.GetCount();
                int pageCount = Convert.ToInt32(Math.Ceiling(rowsCount*1.0/pageSize));
    
                StringBuilder pager = new StringBuilder();
                if (pageIndex == 1)
                {
                    pager.Append("首页 上一页");
                }
                else
                {
                    pager.Append("<a href='javascript:GoPage(1)'>首页</a>&nbsp;<a href='javascript:GoPage(" + (pageIndex - 1) +
                                 ")'>上一页</a>");
                }
    
                if (pageIndex == pageCount)
                {
                    pager.Append("下一页 末页");
                }
                else
                {
                    pager.Append("<a href='javascript:GoPage(" + (pageIndex + 1) +
                                 ")'>下一页</a>&nbsp;<a href='javascript:GoPage(" + pageCount +
                                 ")'>末页</a>");
                }
    
                var temp = new    //创建新对象封装多个需要返回的数据
                {
                    list = list,
                    pager = pager.ToString()
                };
    
                return Json(temp,JsonRequestBehavior.AllowGet);
            }
    
    
            public ActionResult Add()
            {
                List<SelectListItem> list=new List<SelectListItem>();
                var list1 = bookTypeBll.GetList(100, 1);
                foreach (var item in list1)
                {
                    list.Add(new SelectListItem()
                    {
                        Text = item.TypeTitle,
                        Value = item.TypeId.ToString()
                    });
                }
                ViewBag.TypeList = list;
    
                return View();
            }
            [HttpPost]
            public ActionResult Add(BookInfo bookInfo)
            {
                bookInfoBll.Add(bookInfo);
    
                return Redirect(Url.Action("Index"));
            }
    
            public ActionResult Edit(int id)
            {
                ViewBag.Id = id;
                return View();
            }
        }
    }

    (2)view  其中一张表

       (2.1)index:

    @model IQueryable<Model.BookInfo>
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <script src="~/Scripts/jquery-1.7.1.min.js"></script>
        <script>
            $(function() {
                LoadList(1);
            });
    
            function GoPage(pageIndex) {
                LoadList(pageIndex);
            }
    
            function LoadList(pageIndex) {
                $.getJSON(
                    '@Url.Action("LoadList","BookInfo")',
                    {
                        pageSize: 2,
                        pageIndex:pageIndex
                    },
                    function(list1) {
                        var list = $('#list');
                        list.empty();
                        $.each(list1.list, function(index,item) {
                            list.append('<tr><td>'+item.Id+'</td>' +
                                '<td>'+item.Title+'</td>' +
                                '<td>'+item.TypeTitle+'</td>' +
                                '<td><a href="@Url.Action("Edit","BookInfo")?id=' + item.Id + '">修改</a></td>' +
                                '<td></td>' +
                                '</tr>');
                        });
    
                        list.append('<tr><td colspan=3>'+list1.pager+'</td></tr>');
                    }
                );
            }
        </script>
    
    </head>
    <body>
        <div>
            @Html.ActionLink("添加","Add","BookInfo")
            <hr/>
            <table border="1">
                <tr>
                    <th width="100">编号</th>
                    <th width="100">标题</th>
                    <th width="100">分类名称</th>
                    <th width="100">修改</th>
                    <th width="100">删除</th>
                </tr>
                <tbody id="list">
                    
                </tbody>
                @*@foreach (var item in Model)
                {
                    <tr>
                        <td>@item.BookId</td>
                        <td>@item.BookTitle</td>
                        <td>@item.BookType.TypeTitle</td>
                    </tr>
                }*@
            </table>
        </div>
    </body>
    </html>

    (2.2)Add

    @model Model.BookInfo
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Add</title>
    </head>
    <body>
        <div>
            @using (Html.BeginForm("Add", "BookInfo", FormMethod.Post))
            {
                @Html.TextBoxFor(u=>u.BookTitle)
                <br/>
                @Html.TextBoxFor(u=>u.BookContent)
                <br/>
                @Html.DropDownListFor(u=>u.TypeId,(IEnumerable<SelectListItem>)ViewBag.TypeList)
                <br/>
                <input type="submit" value="添加"/>
            }
        </div>
    </body>
    </html>

    (2.3)Edit

    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Edit</title>
    </head>
    <body>
        <div>
            @ViewBag.Id
        </div>
    </body>
    </html>
  • 相关阅读:
    函数参数
    文件操作
    is,数据类型补充,set,深浅拷贝
    is,==区别,编码转换
    列表,元祖,range
    字典,解构
    编码,基础数据类型 int str bool,for循环
    while循环,格式化输出,运算符
    java7中使用透明时与输入法冲突
    TC SRM 597 DEV2
  • 原文地址:https://www.cnblogs.com/wfaceboss/p/6496934.html
Copyright © 2011-2022 走看看