2

私は現在、既存のものが好きではないという理由でフラッシュカードアプリを開発しています.2番目の理由は、Java / Androidのスキルを向上させたいからです。

私のアプリでは、OOP を使用しようとしました。マイ カードは sqlite データベースに保存されます。

今私の質問:現在、単一のフラッシュカードを表す私のオブジェクト「カード」には、独自の状態、つまりポイントを更新するために使用できる独自の DatabaseAdapter があります。

 Card card = new Card();
 card.setPoints(10); //<-- Also update its row in the database

または、次のようなことを行う方が良いですか:

 DBAdapter dbAdapter = new DBAdapter();
 Card card = new Card();
 dbAdapter.setPoints(Card);//<-- Updates Card and Database!

あなたは何が良いですか?

事前にt​​hx!

4

4 に答える 4

4

2 番目の例で実行したことは、副作用を引き起こしているため、お勧めできません。データベースを更新するとカードも更新されますが、これは間違っています。データベースの更新は 1 つのことを行う必要があり、それはデータベースを更新することです。

カードは自分自身を更新する方法を知っているので、最初の方法をお勧めしますが、データベースを更新するという同じ間違いを犯しています。データベースに自分自身を更新する方法を知らせ、カードに自分自身を更新する方法を知らせます。関心事の明確な分離が実現すると思います。

例えば:

card.setPoints(points)//update card and only card
dbAdapter.setPoints(card) //update the database and nothing else.
于 2012-09-23T08:54:23.830 に答える
3

間違いなく最初のもの。ポイントを設定するクラスは、ポイントがどのように設定 (または保存) されるかについての知識を持たない必要があります。それは「責任の分離」です。

データベースから ACME Dilithium Crystal Accumulator(TM) に変更することを決定した場合の将来を想像してみてください。オプション 1 とオプション 2 では、どのくらいのコードを変更する必要がありますか?

于 2012-09-23T08:50:52.540 に答える
1

両方ではないと思います。

 dbAdapter.update(card.getId(),card.getPoint());

構文は

  public boolean update(int id, int value)

DbAdapter には、カード機能に固有であってはならないデータを保存または取得、削除するメソッドのみを含める必要があります。

上記の例では、関連付けられたものをcard.getId() 返し、整数値を更新するだけで、コードの責任と分離が分離されます。URICard

于 2012-09-23T09:08:35.717 に答える
0

上記のコード スニペットの両方が機能する場合は、コードがより読みやすく、直感的で、短いように見えるため、2 番目よりも 1 番目の方をお勧めします。

これが役立つことを願っています。

于 2012-09-23T08:52:09.963 に答える