简单三层

qq_35898288 2016-09-07 06:21:15
怎么能够更好的了解简单三层,比如我在数据库中创建了一张News新闻表,里面也给了Id, Title, PublicTime, Author, ContentHtml, ContentText, Keyword 这些字段,然后也创建了4个类库,名为Venus.BLL,Venus.DAL,Venus.Model,Venus.Utility和一个Venus.UI一个空的网站,然后在Venus.Model也编写了News新闻表类中字段和自动属性,接着在Venus.DAL下的NewsDal.cs中编写了增删改的代码
不知道怎么在Venus.BLL中编写它的逻辑代码
请大婶们帮帮我接下来该怎么做?
如有这方面的视频资源请共享一下
...全文
309 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
BLL 层一定是来自于前端分析设计,通过研究用户交互行为、前端组件、通讯时序,假设千变万化的交互界面使用同一套BLL服务系统,而设计出的BLL层。 软件设计本身不是瀑布式的,而是迭代的。每一个迭代周期(例如2~3周)固然会在各层模型的设计之间“前思后想”去进行反复权衡,但是你在设计思想上要有一个基本的原则,知道什么该消耗比较多的时间去研究,什么该放到后期再进行简单的代码映射。不要在简单的计算机领域的一点点东西上花费巨大时间,不要把交互设计需求视如“仇人、恶虎”而不断逃避。看到你从来没有研究该研究的东西,就来开始考虑设计 BLL层,就如看到一个从未见反复练习过写小说的人仅凭一本“新华字典”就想到了自己一动键盘可以拼凑出一部很成型的小说。 你在“三层”设计上,只是接触了本应该花最少时间的DAL。它是独立的,自成体系的,针对关系数据库的。它不能说明其它层应该如何设计。
  • 打赏
  • 举报
回复
你都没有把前端需求描述出来,没有分析和设计软件设计本身,“工具”就给你凭着几个数据库表就产生了你的 BLL 层设计了,你信吗? 那种所谓的“生成工具所说的‘三层’”,不过是DAL 的薄薄的一层重复,把明明是简单的 SQLHelper、EF 等等通用工具所迅速描述的 DAL 功能,或者泛型技术模板所通用描述的功能,给你按照一个一个数据表而庸俗化。假设一个复杂点的业务系统有150个数据表,原本只要协议套“增删改查”的通用 DALHelper 方法,就能对每一类 Model 进行增删改查。而那种“工具”偏要给你产生150个Class,每一个都千篇一律基本上一样,只是替换点数据库表、字段的名词儿。你因此就认为是BLL 吗?这种工具产生的东西,跟通用的 SQLHelper、ORM、Entity Framework一样的功能,而其可修改的灵活性不如人家的百分之一。这叫做 BLL 层吗?
我叫小菜菜 2016-09-07
  • 打赏
  • 举报
回复
using System;
using System.Data;
using System.Collections.Generic;
using Maticsoft.Common;
using Venus.Model;
namespace Venus.BLL
{
	/// <summary>
	/// News
	/// </summary>
	public partial class News
	{
		private readonly Venus.DAL.News dal=new Venus.DAL.News();
		public News()
		{}
		#region  BasicMethod

		/// <summary>
		/// 得到最大ID
		/// </summary>
		public int GetMaxId()
		{
			return dal.GetMaxId();
		}

		/// <summary>
		/// 是否存在该记录
		/// </summary>
		public bool Exists(int NewsID)
		{
			return dal.Exists(NewsID);
		}

		/// <summary>
		/// 增加一条数据
		/// </summary>
		public bool Add(Venus.Model.News model)
		{
			return dal.Add(model);
		}

		/// <summary>
		/// 更新一条数据
		/// </summary>
		public bool Update(Venus.Model.News model)
		{
			return dal.Update(model);
		}

		/// <summary>
		/// 删除一条数据
		/// </summary>
		public bool Delete(int NewsID)
		{
			
			return dal.Delete(NewsID);
		}
		/// <summary>
		/// 删除一条数据
		/// </summary>
		public bool DeleteList(string NewsIDlist )
		{
			return dal.DeleteList(Maticsoft.Common.PageValidate.SafeLongFilter(NewsIDlist,0) );
		}

		/// <summary>
		/// 得到一个对象实体
		/// </summary>
		public Venus.Model.News GetModel(int NewsID)
		{
			
			return dal.GetModel(NewsID);
		}

		/// <summary>
		/// 得到一个对象实体,从缓存中
		/// </summary>
		public Venus.Model.News GetModelByCache(int NewsID)
		{
			
			string CacheKey = "NewsModel-" + NewsID;
			object objModel = Maticsoft.Common.DataCache.GetCache(CacheKey);
			if (objModel == null)
			{
				try
				{
					objModel = dal.GetModel(NewsID);
					if (objModel != null)
					{
						int ModelCache = Maticsoft.Common.ConfigHelper.GetConfigInt("ModelCache");
						Maticsoft.Common.DataCache.SetCache(CacheKey, objModel, DateTime.Now.AddMinutes(ModelCache), TimeSpan.Zero);
					}
				}
				catch{}
			}
			return (Venus.Model.News)objModel;
		}

		/// <summary>
		/// 获得数据列表
		/// </summary>
		public DataSet GetList(string strWhere)
		{
			return dal.GetList(strWhere);
		}
		/// <summary>
		/// 获得前几行数据
		/// </summary>
		public DataSet GetList(int Top,string strWhere,string filedOrder)
		{
			return dal.GetList(Top,strWhere,filedOrder);
		}
		/// <summary>
		/// 获得数据列表
		/// </summary>
		public List<Venus.Model.News> GetModelList(string strWhere)
		{
			DataSet ds = dal.GetList(strWhere);
			return DataTableToList(ds.Tables[0]);
		}
		/// <summary>
		/// 获得数据列表
		/// </summary>
		public List<Venus.Model.News> DataTableToList(DataTable dt)
		{
			List<Venus.Model.News> modelList = new List<Venus.Model.News>();
			int rowsCount = dt.Rows.Count;
			if (rowsCount > 0)
			{
				Venus.Model.News model;
				for (int n = 0; n < rowsCount; n++)
				{
					model = dal.DataRowToModel(dt.Rows[n]);
					if (model != null)
					{
						modelList.Add(model);
					}
				}
			}
			return modelList;
		}

		/// <summary>
		/// 获得数据列表
		/// </summary>
		public DataSet GetAllList()
		{
			return GetList("");
		}

		/// <summary>
		/// 分页获取数据列表
		/// </summary>
		public int GetRecordCount(string strWhere)
		{
			return dal.GetRecordCount(strWhere);
		}
		/// <summary>
		/// 分页获取数据列表
		/// </summary>
		public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
		{
			return dal.GetListByPage( strWhere,  orderby,  startIndex,  endIndex);
		}
		/// <summary>
		/// 分页获取数据列表
		/// </summary>
		//public DataSet GetList(int PageSize,int PageIndex,string strWhere)
		//{
			//return dal.GetList(PageSize,PageIndex,strWhere);
		//}

		#endregion  BasicMethod
		#region  ExtensionMethod

		#endregion  ExtensionMethod
	}
}

上面是工具生成的BLL层代码。。。
  • 打赏
  • 举报
回复
不是“接下来该怎么做”,你现在不是在编写代码的后期阶段,而是前期分析设计阶段。这个阶段有了问题,应该推倒重来,从忘掉数据库开始。如果满脑子就是“接下来该怎么做”,这就好像是先把人火化了之后然后再开始计划让死人来立遗嘱,这是本末倒置的。
  • 打赏
  • 举报
回复
你这看“设计”思路就叫做“两层结构”。不管你表面上照猫画虎低弄多少目录、多少“层”工程,在设计意识上就是从两层出发、终究落在两层结构中(不管你号称分了多少层)。 知道两层,自己再来理解三层,应该很容易区分。人家设计前端软件时根本忘掉了数据库表,完全反映了用户的需求,那就可以理解业务逻辑层的概念。扔掉你的数据库——实际扔掉你的数据库表,假设没有使用任何种数据库产品,数据就在内存中的实际的面向应用的对象字典、对象集合等等,你还会设计程序吗?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧