大家好,能帮我看看我的设计存在的缺陷吗?

mohugomohu 2009-03-08 10:49:18
我们公司要做一个订酒店、订机票、订夜店、网上商城于一身的网站,原本是外包出去的,可是现在外包那边进度太慢了,老板觉得这样等下去不是办法,于是就把页面再叫别人做,然后我写程序。
既然老板叫到,那我总不能不做吧。可是我虽然平时喜欢写程序,可是都是研究某一个具体的问题,就像逛CSDN论坛一样,大部分都是要实现或者解决某个项目中的一部分功能,很少从整体上设计整个项目,所以根本不知道该怎么设计。
我目前的设计是这样的:整个解决方案分为两个项目,一个是类库项目,一个是网站项目,网站添加类库的引用,类库里面提供了网站需要用到的类和方法。类库包含:BusinessLogic,DataAccess,Entity.
Entity是实体类,对应数据库的表,一张表一个Entity,没什么好说的。DataAccess是数据操作层,里面有一个DataAccessor类是所有数据操作类的父类,然后每个Entity都有一个对应的数据操作类,要操作数据库时就根据传进来的参数写sql语句,然后调用父类的ExecuteSqlNoneQuery或者Query方法然后返回相应的值。下面是这两个方法:
 
//执行对sql server数据库的编录操作,成功返回true,失败为false
protected bool ExecuteSqlNoneQuery(string sql)
{
SqlConnection conn = null;
try
{
conn = GetSqlConnection();
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
//执行对sql server数据库的查询
protected DataTable Query(string sql)
{
SqlConnection conn = null;
try
{
conn = GetSqlConnection();
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}


BusinessLogic我本来是打算作为逻辑层的,可是又觉得逻辑写在aspx.cs里就得了,然后这个层就作为给Entity实体类赋值的层,如果是增删改操作的话这个层就纯粹是中转站,把页面传进来的一堆参数封装成Entity然后传到DataAccess里操作。当然这个层所有的类也有一个父类,但是目前父类没有方法。我感觉这个应该并到DataAccess里去,但是现在已经没法改了,工作量太大。下面是BusinessLogic的示例方法:
 
/// <summary>
/// 修改酒店
/// </summary>
/// <param name="id"></param>
/// <param name="hotelName"></param>
/// <param name="star"></param>
/// <param name="description"></param>
/// <param name="cityId"></param>
/// <param name="synthesis"></param>
/// <param name="pets"></param>
/// <param name="activePlace"></param>
/// <param name="service"></param>
/// <param name="net"></param>
/// <param name="parking"></param>
/// <param name="cancel"></param>
/// <param name="children"></param>
/// <param name="creditcard"></param>
/// <returns></returns>
public bool Update(int id,string hotelName,int star,string description,int cityId,string synthesis,
string pets,string activePlace,string service,string net,string parking,
string cancel,string children,string creditcard)
{
Hotel entity = new Hotel();
entity.HotelId = id;
entity.HotelName = hotelName;
entity.Star = star;
entity.Description = description;
entity.CityId = cityId;
entity.Synthesis = synthesis;
entity.Pets = pets;
entity.ActivePlace = activePlace;
entity.Service = service;
entity.Net = net;
entity.Parking = parking;
entity.Cancel = cancel;
entity.Children = children;
entity.Creditcard = creditcard;
try
{
return ha.Update(entity);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 根据城市ID查询酒店
/// </summary>
/// <param name="cityId"></param>
/// <returns></returns>
public Hotel[] QueryByCityId(int cityId)
{
Hotel[] entityList = null;
try
{
DataTable dt = ha.QueryByCityId(cityId);
entityList = FillEntityList(entityList, dt);
return entityList;
}
catch (Exception ex)
{
throw ex;
}
}
//填充实体类列表
private Hotel[] FillEntityList(Hotel[] entityList, DataTable dt)
{
if (dt.Rows.Count > 0)
{
entityList = new Hotel[dt.Rows.Count];
//用反射给实体类赋值
for (int i = 0; i < entityList.Length; i++)
{
Hotel entity = new Hotel();
PropertyInfo[] props = typeof(Hotel).GetProperties();
for (int j = 0; j < props.Length; j++)
{
string columnName = props[j].Name;
object value = dt.Rows[i][columnName];
props[j].SetValue(entity, value, null);
}
entityList[i] = entity;
}
}
return entityList;
}


BusinessLogic里的类全部都用了单例模式,我用这个模式的原因仅仅是为了耍酷。因为我去年暑假在电信实习的时候,带我的那个师傅很喜欢用这个,我除了在Winform的“同时只有一个同类窗体出现”这个问题上用过之外,就体会不到别的好处了。
现在程序的流程是:页面+各种自定义控件(aspx)-逻辑处理(aspx.cs)-实体中转站-
(BusinessLogic)-数据操作(DataAccess)。
我去年5月份才通过程序员,现在还是实习,要今年7月份才得毕业啊,他就叫我做设计师的活(可惜工资还是只有一千而已),我感觉压力真是大啊!我怕到时候真的把这个网站放上去,三两下就挂了,那我怎么办啊!因为老板什么都不懂的,广告公司啊,就只有我一个搞程序的,想找人问一下都不得!大家觉得我这样设计有没有什么可能会存在的问题啊,好让我完善啊!
我读的是大专,所以大家不要讲得太深奥啊,PetShop对我来说都是太复杂了,最好是从解决问题的角度来说啊谢谢。
唉,迷茫的设计,迷茫的人生。
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-03-08
  • 打赏
  • 举报
回复
能用到这个已经可以了。数据库操作类可参考petshop,用抽象类和工厂模式设计。对象用实体类操作。
看看dot bbs也可。
冷月孤峰 2009-03-08
  • 打赏
  • 举报
回复
public bool Update(int id,string hotelName,int star,string description,int cityId,string synthesis,
string pets,string activePlace,string service,string net,string parking,
string cancel,string children,string creditcard)
搞这么多参数不眼花啊,既然有实体类,为什么这么写呢?

public bool Update(Hotel entity)
{
try
{
return ha.Update(entity);
}
catch (Exception ex)
{
throw ex;
}

}

111,126

社区成员

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

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

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