f********3 发帖数: 210 | 1 一道是hotel reservation,一道是parking lot。
比如hotel reservation,疑惑这两种做法应该是哪一种:
1. User主动来book room。但这样的话,Room和bookingSystem都得成为属于User类的
成员。函数为:
User.bookRoom()
{
return system.bookRoom(); //用户的booking request传给系统
}
2. User只具备基本信息,不能主动book room。booking system来连接User和Room.
在System类里面有个bookRoom函数:
bookRoom(User, Room)
{}
感觉2更make sense. 问题在于,如何能把User请求的信息包括进来,如果User不能调
用system类的话?(该user想要的room type, from & to dates)
另外一个Parking lot也有类似疑惑。感觉Car主动来Park是make sense的,不过这样就
不需要manager类了。比如:
public boolean Park(ParkingLot p)
{
space = p.FindOpenSpace(type);
if(space != null)
{
space.setState(false);
return true;
}
else
{
System.out.println("The type of "+type+" slot has been occupied!
");
return false;
}
}
望各位大侠指教! |
I******k 发帖数: 378 | 2 俺觉得应该用第一个
有user可以book room,admin可以修改等等
【在 f********3 的大作中提到】 : 一道是hotel reservation,一道是parking lot。 : 比如hotel reservation,疑惑这两种做法应该是哪一种: : 1. User主动来book room。但这样的话,Room和bookingSystem都得成为属于User类的 : 成员。函数为: : User.bookRoom() : { : return system.bookRoom(); //用户的booking request传给系统 : } : 2. User只具备基本信息,不能主动book room。booking system来连接User和Room. : 在System类里面有个bookRoom函数:
|
f********3 发帖数: 210 | |
s*****n 发帖数: 5488 | 4 我个人认为,设计题是很open的讨论题,问设计题的单位一般来说要和用户交流。这题
首先考你交流能力。所以,说一千道一万都没有用的。要看面馆的交流。
第二,不理解为什么预订系统里面会有user这个概念。本质上,考预订这种题是考资源
管理方面的设计能力。例如多线程访问。而且可能是web系统,可能是本地系统。所以
,这个user在web到底是个什么?用户注册的账号?
所以,我认为答题是可以从最简单开始,例如房间预订就是概念上对资源(房间)和日
历的一个锁定。然后再问你要考OOD呢,设计模式 singleton呢(只能有一个booking
system, everyroom only one instance too).web系统呢,数据库设计呢,还是用什么
数据结构来存储呢,用什么rw锁还是什么锁呢,还是考虑怎么查询空房呢。
最后,方法一概念上肯定是错的。User 不可能has a room or booking system。
【在 f********3 的大作中提到】 : 一道是hotel reservation,一道是parking lot。 : 比如hotel reservation,疑惑这两种做法应该是哪一种: : 1. User主动来book room。但这样的话,Room和bookingSystem都得成为属于User类的 : 成员。函数为: : User.bookRoom() : { : return system.bookRoom(); //用户的booking request传给系统 : } : 2. User只具备基本信息,不能主动book room。booking system来连接User和Room. : 在System类里面有个bookRoom函数:
|
P**********c 发帖数: 3417 | 5 嗯,问问题是对的。不过感觉你考虑的比较偏。网上普遍的答案对设计题的考察就是OOD. 比如设计一个parking lot, 电梯系统这些,照你的理解是不是也是设计一个管理parking lot的网站呢?预定房间这个一样,我觉得不是让你设计一个网上订房间的网站,而是就是考察OOD的思路。
【在 s*****n 的大作中提到】 : 我个人认为,设计题是很open的讨论题,问设计题的单位一般来说要和用户交流。这题 : 首先考你交流能力。所以,说一千道一万都没有用的。要看面馆的交流。 : 第二,不理解为什么预订系统里面会有user这个概念。本质上,考预订这种题是考资源 : 管理方面的设计能力。例如多线程访问。而且可能是web系统,可能是本地系统。所以 : ,这个user在web到底是个什么?用户注册的账号? : 所以,我认为答题是可以从最简单开始,例如房间预订就是概念上对资源(房间)和日 : 历的一个锁定。然后再问你要考OOD呢,设计模式 singleton呢(只能有一个booking : system, everyroom only one instance too).web系统呢,数据库设计呢,还是用什么 : 数据结构来存储呢,用什么rw锁还是什么锁呢,还是考虑怎么查询空房呢。 : 最后,方法一概念上肯定是错的。User 不可能has a room or booking system。
|
s*****n 发帖数: 5488 | 6 A公司主要是ood,你一说我想起这题的trick在哪里了。如果是 ER设计,需要有个
reservation的关系。OOD里面也要有这莫一个对象才是正确的。
如下
Reseveation User.Reserve(RoomSpec spec, DateRange range){
return BookingSystem.GetInstance.Reserve(this,spec, range);
}
in BookingSystem.Reserve(..) find a room with sepc in the range,
then new reseravation(user, room, range) and return.
OOD. 比如设计一个parking lot, 电梯系统这些,照你的理解是不是也是设计一个管理
parking lot的网站呢?预定房间这个一样,我觉得不是让你设计一个网上订房间的网
站,而是就是考察OOD的思路。
【在 P**********c 的大作中提到】 : 嗯,问问题是对的。不过感觉你考虑的比较偏。网上普遍的答案对设计题的考察就是OOD. 比如设计一个parking lot, 电梯系统这些,照你的理解是不是也是设计一个管理parking lot的网站呢?预定房间这个一样,我觉得不是让你设计一个网上订房间的网站,而是就是考察OOD的思路。
|
f********3 发帖数: 210 | 7 user指的订房间的顾客。
你这样一说我也觉得很有道理了。design里面可以考虑成我们已经知道user的请求是什
么了(room type, date from, date to),然后以hotel, room, reservation这几个类
作为核心。User类可以有,但这个类的function不多。
另一个问题是多线程、数据库这些比较技术的东东在短时间内如何准备比较好?对于
fresh graduate,编程算法这些好准备,但技术没做过的话感觉比较难。
【在 s*****n 的大作中提到】 : 我个人认为,设计题是很open的讨论题,问设计题的单位一般来说要和用户交流。这题 : 首先考你交流能力。所以,说一千道一万都没有用的。要看面馆的交流。 : 第二,不理解为什么预订系统里面会有user这个概念。本质上,考预订这种题是考资源 : 管理方面的设计能力。例如多线程访问。而且可能是web系统,可能是本地系统。所以 : ,这个user在web到底是个什么?用户注册的账号? : 所以,我认为答题是可以从最简单开始,例如房间预订就是概念上对资源(房间)和日 : 历的一个锁定。然后再问你要考OOD呢,设计模式 singleton呢(只能有一个booking : system, everyroom only one instance too).web系统呢,数据库设计呢,还是用什么 : 数据结构来存储呢,用什么rw锁还是什么锁呢,还是考虑怎么查询空房呢。 : 最后,方法一概念上肯定是错的。User 不可能has a room or booking system。
|
s*****n 发帖数: 5488 | 8 没有经验只有多搜题,多做题了。
【在 f********3 的大作中提到】 : user指的订房间的顾客。 : 你这样一说我也觉得很有道理了。design里面可以考虑成我们已经知道user的请求是什 : 么了(room type, date from, date to),然后以hotel, room, reservation这几个类 : 作为核心。User类可以有,但这个类的function不多。 : 另一个问题是多线程、数据库这些比较技术的东东在短时间内如何准备比较好?对于 : fresh graduate,编程算法这些好准备,但技术没做过的话感觉比较难。
|
P**********c 发帖数: 3417 | 9 multithreading是比较难复习。更难复习的我觉得是distributed system, 那个说来说
去感觉就是求个modular, 分到不同机器上去,其他的说不出太多所以然。要是有人系
统的讲一下这种问题的大致思路就好了。
【在 f********3 的大作中提到】 : user指的订房间的顾客。 : 你这样一说我也觉得很有道理了。design里面可以考虑成我们已经知道user的请求是什 : 么了(room type, date from, date to),然后以hotel, room, reservation这几个类 : 作为核心。User类可以有,但这个类的function不多。 : 另一个问题是多线程、数据库这些比较技术的东东在短时间内如何准备比较好?对于 : fresh graduate,编程算法这些好准备,但技术没做过的话感觉比较难。
|
g**********y 发帖数: 14569 | 10 Hotel reservation 简单设计
先看设计的问题核心:
1. limited resources (room)
2. each resource associates with Time
然后构想简单故事:
1. User checks room availability from Day i to Day j
2. System makes reservation on a Room on a Timespan for a User
3. User cancels a reservation
自顶向下设计class:
BookingSystem {
Room[] rooms;
Vector reservations;
Vector users;
Room[] available(TimeSpan t);
int reserve(int userId, TimeSpan t, int roomId);
void cancel(int reservationNumber);
}
TimeSpan {
Time start;
Time end;
}
Room {
int id;
Vector times;
boolean available(TimeSpan t);
boolean reserve(TimeSpan t);
void cancel(TimeSpan t);
}
Reservation {
int id;
String userId;
int roomId;
TimeSpan t;
}
User {
String name;
String id;
CreditCard info;
}
这是粗线条的勾勒,要在上面加,你可以先扩展故事,然后添加class。
我的感受是:class是为你要达到的目的服务的,如果有必要,可以添;没有必要,能
简单就简单。
以上设计,可以改进的地方很多,欢迎修改。 |