5.レイアウトモジュールの設計
いわゆる分類は、CQ66 モードでは、ユーザーが自分の希望に従って分類できます
いずれにせよ、最終的にはバージョンに基づいて直接アクセスされます。
レイアウト記事へのアクセスは、保存時に記事全体がパラメータとして使用されます
上位レイヤーがブロック単位で送信すると、すべてのデータが上位に送信されます。結合後、パラメータはこの層に送信されます。
読み取り時に、この層はブロック単位でアクセスされます。
の結合作業は上位層で行われます。 、この層に関係なく。
上位層の動作に影響を与えずに独立したインデックスを作成するかどうかについては、主に下位層のデータベース構造に関連し、主に実現可能性、効率要件などを考慮します。
権限チェックはどこで行われますか?実際、Telnet サーバー側では、
と cq66 クライアントは通常のユーザーに特別なコマンド メニューをまったく表示しません。もちろん、ユーザーは
直接 cq66 コマンドを送信できます。チェックする。ただし、関数モジュール層を使用せずに再度チェック
するべきではありません。 Class BoardManage {
private:
public:
// 分類関連の操作
int GetClassNameInfo( int maxclass, char **classid,
char ** classname ); 分類情報、中国語名と英語名を返します。
int GetBoardName( int maxboards, char *classid,
char **boardname );
一般カテゴリの場合は、直接選択します。
sboard から
where boardclass == .... 特殊なカテゴリの場合は、ボード情報を返します。カテゴリ、対応するテーブルを検索します。 。 。 。面 // レイアウト管理者以上が必要な権限を変更します
int newclass (Char * NewClassName, Intten);
新しい分類、通常の分類は特殊な分類のままです、
int deleteclass (Char * NewClassName)
分類を削除します。 CAS cade ではありません。つまり、この層は一貫性を担当せず、上位層が対応するレイアウトの分類情報を別のものに変更する責任を負います。カテゴリの名前を変更するには、まずカテゴリを削除してから作成します。
int AddClassBoard( const char *classname, char *newboardname);
すでに構築されたバージョンを特定のカテゴリに追加します (特に、一般的なカテゴリの場合)。 modifyboardinfo と同じです。
int DeleteClassBoard( const char *classname, char *boardname);
分類から特定のボードを削除することも特別な分類の場合であり、一般的な分類の場合は、効果はmodifyboardinfoと同じです。ボードの分類属性は空にすることができます。つまり、どのカテゴリにも属しません。
// バージョン情報に関する操作。
int NewBoard( const char *boardid, char *boardname);
新しいボードを作成し、対応するテーブルを作成します。他のパラメータはデフォルト値をとります。
int DeleteBoard( const char *boardid);
ボードを削除し、対応するテーブルを削除します。
int GetBoardInfo( const char *boardid, char *boardname,
int& numposts, char *masters, char *class,
long &level);
ボード情報を取得します。
int ModifyBoardId( const char *oldid, char *newid);
英語 ID が変更された場合は、対応するテーブルの名前も変更する必要があります。
int ModifyBoardInfo( const char *boardid, char *boardname,
int numposts, char *masters、Char *class、
Long level);
レイアウト情報を変更するには、権限が必要です。
// レイアウト記事に関する操作。
int AddText( char *boardid, char *title, char *writer,
char *text );
レイアウトに記事を追加し、長い記事を内部で 2k ブロックに分割します。
int DeleteText(char *boardid, int num);
記事を削除してもマークが付けられるだけで、対応するテーブルはすぐには変更されません。
int FlushTable( char *boardid );
レイアウトを更新し、削除された記事の対応するレコードを削除します。
int MarkText(char *boardid, int num, char mark);
記事をマークします。
int ModifyTitle( char *boardid, int num, char *newtitle );
記事のタイトルを変更します。
int ModifyText(char *boardid, int num, char *newtext);
記事の内容を変更するには、自分の記事に対する権限は必要ありません。
int GetTextInfo( const char *boardid, int num, char *title,
char *writer, char& mark );
記事のタイトル情報を取得します。
int GetText( const char *boardid, int num, int block,
char *text );
記事の内容をブロック単位で読み取ります。
// 記事と著者のクエリ
// すべてのクエリ結果を一度に返しますか?
int QueryWriter( const char *boardid, char *writer,
char **result);
ページ上の特定の著者の記事をクエリします。
int QueryTitle( const char *boardid, char *title,
char **result);
タイトルに指定されたコンテンツが含まれるフォーラムの記事をクエリします。
}
抽象的な観点から見ると、返されたデータは最下層とは関係がないため、処理される必要がありますが、効率の観点からは、そうしません。データを複数回コピーしたくないのですが、一方で、領域解放の申請は上位層で完了する必要がありますか?注意しないと、メモリエラーが発生しやすくなります。