面试题 设计业务逻辑层和数据库结构
面试题 设计业务逻辑层和数据库结构
如题:
对于业务逻辑层 描述出相关接口即可
订单号 xxxxxx 订单日期 xxxxxx
客户 xxxxxx 总金额 xxxxxx
商品名称 单价 数量 总金额
xxxxxx xx xx xx*xx
xxxxxx xx xx xx*xx
... ...
我设计的数据库结构:
单头表 -> 订单号 varchar(...) 订单日期 datetime 客户 varchar(...) 总金额 decimal(...)
单体表 -〉 订单号 varchar(...) 商品编号 varchar(...) 商品名称 varchar(...) 单价 decimal(...)
数量 decimal(...) 总金额 decimal(...)
我设计的业务逻辑层:
public class order
{
public DataTable sel(orID) {...} //制定订单号查询订单
public int del(orID) {...} //删除指定订单 返回受影响行数
... ...
}
我觉得我写的数据库结构还行 至于业务逻辑层吗 呵呵 估计是丢人了
诸位帮看下
------解决方案--------------------业务逻辑没有sel这种操作。订单本身就“存在”明细部分,至于是否查询出来的,不是业务逻辑设计内容,是将来由程序员实现时才会被说明的,在Order中并没有。
一个订单的明细,基本上使用定义:
public OrderDetail[] Items{get;}
或者:
public List <OrderDetail> Items{get;}
同时,OrderDetail类型中也会有一个属性
public Order Parent{get;set;}
在Order中也不需要有删除操作。当从持久化机制中删除OrderDetail的时候,会根据Parent来更新订单中的对明细的关联(或者根本不需要更新),但是总之这不是业务逻辑内容。
上述设计没有没有考虑任何业务规则,实际的东西应该比这个复杂10倍以上。
数据库设计比较低级。基本上,设计好业务逻辑和接口,数据库结构就可以由反射程序自动产色和那个和升级更新了,不需要由人工去产生和维护。
------解决方案--------------------数据库结构就可以由反射程序自动产色和那个和升级更新 -->
数据库结构就可以由反射程序自动产生和升级更新
在从业务逻辑到持久化程序的映射的程序中,应该考虑对象的继承、关联、索引、级联更新、c/s处理、缓存等,仅仅会创建数据库表,实在是做得太少了。
------解决方案--------------------bwangel(永远的裤衩),他分单头和单体是对的,明细表关系。
不过看到楼主的类和两个方法的命名我就郁闷,如果是面试,就因为这个会很容易被刷掉。
至少要大写类名吧?
SP1234分明是要让楼主用一套ORM工具……
我觉得如果细表对象(OrderDetail)不需要用到主表对象(Order)的话,也不一定需要建立Parent属性。
更典型的是如果系统并不关心OrderDetail对象(系统粒度为订单级),设计的时候也有可能不建立OrderDetail类型。Order中的item只是Product的一个简单引用。
不过楼主这里有价格,数量,和总价,单独的OrderDetail对象还是需要的。
当然从完备对象关系的角度看,sp1234说的很有道理。
------解决方案--------------------我热泪盈眶 一是热心人太多 二是我肯定面试over了 ... ...
我固执的认为我的表设计得还凑合
varchar nvarchar看看这两个保存英文和中文的情况
。。。。。