大家好,小弟有一个关于订单系统中订单的疑惑,能否给我点指导,谢谢

10-09-16 freesea

有一个租车订单管理系统,核心是订单,一个订单允午有多部车辆,订单也会有跟单员和业务员,为了及时能联系客户,也会需要乘客信息(有多个乘客)

订单中包括以下元素:

1、租车客户(Customer)

2、订单的跟单员(User)

3、订单的业务员(User)

4、客户需要租的车辆(Car)

5、乘客信息(passenger)

6、行程,及备注信息

我写了如下的类:

public class Order {

/* 订单标识, */

private String orderEntityID;

// 订单编号

private String orderNumbers;

// 订单的客户

private Customer customer;

// 跟单员

private User Merchandiser;

// 业务员

private User Salesman;

// 订单所使用车辆

private Set<Car> cars;

// 乘客(姓名+电话)

private List<Passenger> passengers;

// 订单行程

private String orderTravel;

// 订单行程

private String orderRemark;

/**

* 带唯一标识的构造器

* @param orderEntityID 实体标识

* */

public Order(String orderEntityID) {

this.orderEntityID = orderEntityID;

}

///------这是getter和setter

}

我的疑惑是:如果以这种方式写出这个订单(Order)类,以后会出现很大的问题

1、如果车辆的信息有变动,修改车辆时,已经归档了的订单,因为有Set<Car> cars;这个关联,那么订单相关车辆的信息也会跟着改变。(按正常的实际需求是,改动车辆,归档的订单不会受到影响,除非用户去重新更新了这个归档的订单)

2、同1一样,跟单员、业务员的修改也会影响到归档了的订单

3、当用户删除了跟单员(这个员工不在公司做了),以前归档了的订单也受些影响

为了解决上面的问题,我又修改了一下:

public class Order {

/* 订单标识, */

private String orderEntityID;

// 订单编号

private String orderNumbers;

// 订单的客户

private Customer customer;

// 跟单员

private User Merchandiser;

// 业务员

private User Salesman;

// 订单所使用车辆

private Set<Car> cars;

// 乘客(姓名+电话)

private List<Passenger> passengers;

// 订单行程

private String orderTravel;

// 订单行程

private String orderRemark;

//------增加部分-------------------------------------

private String customerName;//把客户名称从客户(Customer)拿出来

private String MerchandiserName;//跟单员(User )名称,联系电话等信息,也从User 复制到Order中来,

为了更清淅,我就不列出来了所有包含的元素了

//这里是把订单包含的元素像上面两行一样复制出来

//这样的话,就算是客户改动了,也不会关联到这个归档了的订单,因为这个订单保留了当时下单那时的信息

/**

* 带唯一标识的构造器

* @param orderEntityID 实体标识

* */

public Order(String orderEntityID) {

this.orderEntityID = orderEntityID;

}

///------这是getter和setter

}

这样虽然可以,但是我想了想也会出现很多问题,同时我也觉得这样做,或者这种方式可行吗?

具体的问题如下:

1、如果用户按客户名称搜索时,由于有些客户有改动过名称之类的,归档的订单没办法出来

2、如果按跟单员(由于跟单元,有名称后来被修改了,归档的订单又没更新,也找不到呢)

像这类问题应该如何解决呢

[该贴被freesea于2010-09-16 19:27修改过]

         

freesea
2010-09-16 22:33
各位帮个忙了,在这谢了

rayo
2010-09-17 12:48
我认为你这样归档是对的,相当于保留订单的一个快照

至于你最后的顾虑,你可以在归档表中加入客户ID和跟单员ID

根据客户名称和跟单员名称搜索归档信息时,名称是来源于客户表和跟单员表的。而实际数据从归档表中获取。

上面是根据当前最新名称进行检索的。

假如名称条件是允许历史+当前,那么就是用union来合并结果集

不过hql没有这个关键词,只能用sql

freesea
2010-09-17 14:43
2010年09月17日 12:48 "rayo"的内容
我认为你这样归档是对的,相当于保留订单的一个快照

至于你最后的顾虑,你可以在归档表中加入客户ID和跟单员ID

根据客户名称和跟单员名称搜索归档信息时,名称是来源于客户表和跟单员表的。而实际数据从归档表中获取。

上面是根据当前最新名称进 ...

我也是想打算这样做的,只是想了解大家有没有其它方法,因为这些对象的编写是非常常见的,对象的关联问题,就如我上面写的,一个对像引用了多个对象,及对象集,如果每个被引用的对象都要复制出它的属性,这样是不是很不自然?如果不这样写,是否还有更好的方式,或者我本来就理解错了这种对象关系?所以就是这里一直困扰着我,谁能提供些指导呢,真是感激不尽哦

[该贴被freesea于2010-09-17 14:45修改过]

freesea
2010-09-17 17:51
如果都把关联的对象的属性复制到Order对象,以减小竞争的话,是不是对Order污染了呢,有没有更好的解决方法,希望大大们指点一下

Order 类,目前只把客户(Customer)的主要属性提到Order中来,以减小竞争,同时还保留Customer的引用,Order类中还有其它比如跟单员,等等还没提出来,我感觉这种方式很别扭,也不知道如何改进,希望高人指点一下,谢 谢

public class Order {
	/* 订单标识,经历各种生命周期,始终不变 */
	private String orderEntityID;
	// 订单编号
	private String orderNumbers;

	// 订单的客户
	private Customer customer;
	private String customerName;//公司名称
	//从客户中选择的秘书复制到订单中来
	private Collection<CustomerContact> contacts;
	private String companyTel;//公司电话
	private String companyFax;//公司传真
	
	// 跟单员
	private User Merchandiser;
	// 业务员
	private User Salesman;
	// 订单所使用车辆
	private Set<Car> cars;
	// 乘客(姓名+电话)
	private List<Passenger> passengers;

	// 订单行程
	private String orderTravel;

	// 订单行程
	private String orderRemark;

	/**
	 * 带唯一标识的构造器
	 * @param orderEntityID 实体标识
	 * */
	public Order(String orderEntityID) {
		this.orderEntityID = orderEntityID;
	}

下是Customer 类

public class Customer {
	private String customerEntityID;
	private String customerName;
	private String industry;//客户行业
	private String area;//所在区域
	private String customerType;//客户类型
	
	/*客户秘书可以有多于1个的联系人*/
	private Collection<CustomerContact> contacts;
	
	private String companyTel;//公司电话
	private String companyFax;//公司传真
	private String companyWeb;//公司网址
	private String companyAddress;//公司地址
	
	private String customerSource;//客户来源
	private String remark;//备注
	
	public Customer(String customerEntityID){
		this.customerEntityID = customerEntityID;
	}
}
<p>

猜你喜欢
3Go 1 2 3 下一页