在团队项目中工作以构建相当多的IRC副本,并配备GUI战斗站后,我意识到我编写的代码远不止GUI(用户命令,字体命令,聊天过滤器等)。
这是我在OOP的第一次尝试,我现在陷入了一个巨大的GUI类,我很想分成更小的类。
但是,现在我面临以下情况:
Class A {
public:
int printStuff();
int doThings();
}
A::printStuff() {
return doThings;
}
A::doThings() {
return 2;
}
类仍然需要交互的情况。 请记住,类系统比这复杂得多,并且我提出的所有5个子类之间都存在交互。
但是A级应该只是印刷东西而不是做事;因此,我很乐意这样:
Class A {
public:
int printStuff();
}
Class B {
public:
int doThings();
}
最好/最优雅的方法是什么?
如果它有帮助,那么继承标题中的实际块;我已经评论了每个方法所需的函数/变量 - 并且还概述了我提出的子类:
// ncurses (GUI, screens)
void setup(); // initScreen(); initWindows();
void initScreen(); // ncurses.h
void initWindows(); // screen vars, ncruses.h, dummy text
void resize(); // screen vars, ncruses.h, showScreen();
void Routine();
// message factory (GUI, controll, vars)
string mRequested(); // _messageQueue
void mRecieved(string message); // command(), printchat(), _chatlog, _user
bool command(string message, int out_in); // _user, _messageQueue, mRecieved -- quit(not made), removeUser
int checkVulgar(string *message); // _user
string upperCase(string message);
// GUI (windows, vars)
void printAscii(WINDOW *scr, char *gaphics[], int sizey, int sizex, int starty, int startx); // ncurses.h, windows
void printServers(WINDOW *scr, int a); // ncurses.h, windows
void printMessage(string message, int message_lines, int *h_index, int *attempt, int *message_len, int prev_len, int endline); // ncurses.h, windows
void printUsers(WINDOW *scr); // _users, ncurses.h, windows
void printTimeout();
void printChat(); // printMessage(), fontcommands, _chatlog, ncurses.h, windows //
void showScreen(int a, int b); // printAscii,servers,users,chat , ncurses.h, windows
// control (GUI, _users)
void updateUsers(vector<User> users); // _users, printUsers();
void removeUser(string user); // _users, printUsers();
// Boundary (ncurses, GUI, messageFactory, vars)
void userInput();
void userInputB(); // _user, resize(), printchat(), mRecieved(), checkvulgar(), quit(), command(), _messageQueue
int selectServer(); // showScreen()
答案 0 :(得分:2)
最好/最优雅的方法是什么?
坐在沙发上几天,然后想出一个健壮而优雅的设计。
然后实施该设计。
你犯的错误不是在开始编码之前设计。现在已经是重构的时候了。
答案 1 :(得分:0)
弄清楚哪些类应该做什么,尝试制作一些CRC卡。它们很有助于弄清楚类图应该是什么样的。
答案 2 :(得分:0)
在重新设计类设计并从头开始之后,我设法分离并重用了我之前的大多数代码。
对于任何想知道的人,mainApp现在直接与MessageFactory对话; MF包含GUI和Windows的对象(前一图像中的ncurses)。
这真的是从一开始就应该如此,糟糕的计划(由于对命令行GUI一无所知,以及添加新功能的兴奋)引起了我很大的悲痛。
正确计划或受苦。