アプリ版:「スタンプのみでお礼する」機能のリリースについて

本の管理をするアプリを作っている時にまた疑問が出てきました。

public class Book
{
public string Title { get; set; }
public string ISBN { get; set; }
public Money Money { get; set; }
public int Rate { get; set; }
public DateTime BuyDate { get; set; }
}

本の管理にレートをつけられるようにしようと思っています。
iTunesの★マークのようなものにしたいので1~5の固定です。
つけていないものもあるので0も存在します。

ここでレートを付けている本を、それぞれのレート別にグループに分けたいと思いました。
そこでレート1~レート5までのグループをどのように管理するのがベストというか、どのように考えればいいのでしょうか。

私が考えたのは、グループ別に処理が分かれるのでクラスを作った方がいいと考えたのです。
とりあえず同じ処理もいくつか発生するので

public abstract class AbstractRate
{
public int Value { get; set; }
private static BookCollection _bookCollection; //全ての本が入る
public BookCollection BookCollection { get { return _bookCollection; } }
}

みたいな基底クラスを作り

public class Star1 :AbstractRate
{
private BookCollection _books;
}

から Star5までの似たようなクラスを作り、それぞれのレートのBookコレクションを持たせる形です。
ただこれだと同じようなクラスが増えるだけでものすごく冗長だと思うのです

そこでもう一つ思ったのは

public class GroupClass
{
public string GroupName { get; set; }
public BookCollection BookCollection { get; set; }
}

という形でグループ名と本のリストを入れておく形です。
これだとクラスは分かりやすくていいのですが、毎回処理をさせる際にこの名前のグループならこれみたいな処理が必要になる気がして悩んでいます。


実際どのように考えるのがいいのでしょうか?
直接的な回答でなくてもいいのですが、考える材料が欲しいです。
よろしくお願いします。

A 回答 (1件)

AllBooks=全ての本の情報


みたいにして、
http://dobon.net/vb/dotnet/programing/arrayfilte …
にあるような方法で、必要に応じて
Star5 = Allbooks.フィルタ(Rate-5を検索)
のように抽出して
foreach(book in Star5 ){
星5の処理;
}
と該当したものだけ処理をする。

というのが素直でいいと思います。


別解。
データはデータベースに保存する。
必要なときに、必要なものだけを抽出したり更新したりする。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ないです。
ifで回さなくても個別に抽出して回せば確かに自然ですね!
データベースはまだこれからなので、とりあえず前者の方法でやってみて、のちにデータベースでも試してみたいと思います。
ありがとうございました!

お礼日時:2014/11/14 16:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!