-
Notifications
You must be signed in to change notification settings - Fork 111
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます。
まず、masterとの違いを確認したいのであればブランチ切り替えで対応できるので、ifディレクティブで切り替え可能にしなくてもいいかなと思いました。
リファクタリングという観点からは、不要な記述は削除してしまった方がすっきりしますし、C#の流儀をよくわかっていないのですが、プリプロセッサディレクティブは可読性を落とすイメージがあり、可能な限り使いたくないという気持ちがあります。
AndroidExtensionsはAndroidでしか使わないのでと言うのはご指摘の通りです。いっそファイル名もExtensions.cs
に変えてしまってもいいかもしれません。
また、 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確認しました。
いくつかレビューで指摘しましたが、基本的に不要コードの削除とJsonConvertの展開で挙動やテストの範囲が大きく変わると言ったことはなさそうだなと思いました。
今日あたりにユニットテストと、iOSでのビルドチェックしてみます。
iOSとAndroidでビルドチェックしました。 |
`DiagnosisSubmissionParameterExtensions` を `DeviceCheckService` に結合
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@@ -42,5 +34,31 @@ async Task<string> GetSafetyNetAttestationAsync(byte[] nonce) | |||
using var response = await client.AttestAsync(nonce, AppSettings.Instance.AndroidSafetyNetApiKey); | |||
return response.JwsResult; | |||
} | |||
|
|||
public static byte[] GetNonce(DiagnosisSubmissionParameter submission) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[質問] GetNonce
を Public にしている理由は何故ですか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
元々 public
だったものをそのまま引き継いだ為です。元は別のプロジェクトに入っていたので public
になっていたのだろうと思います。また、外部に公開しておけば単体テスト処理も書き易いでしょう。(この PR はリファクタリングが目的ですので、ここでは単体テストは書いていません)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
せっかく指摘いただきましたし、このあたりはprivateにしておきましょうか。
単体テスト処理を書く必要が出てきたらアクセスコープを見直しましょう。個人的にテストはpublicなメソッドだけで良いと思っているので、DeviceCheckの先をモック化してテストを書くことになるかと思います。
もしこれらのメソッドが壊れやすいもので、テストの柔軟性を最大限確保するなら、このあたりは別のstaticクラスにして置いておくのも一案と思います(それをすると元に戻すことになるのですが…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
GetNonce
を修正し、付け加えて GetSafetyNetAttestationAsync
に private static
を書き加えました。
@cocoa-devさん、@keijiさん、@heykuroさん、@halskさん 8052045 にて新しいクラス |
https://github.com/Takym/cocoa/tree/refactoring/optimization2 にて更にリファクタリングを行いました。必要であればこのPRへマージします。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
コンフリクトの解消お願いします!
ご指摘の これはこのままでも動きますが、統一感を考えれば他のServiceと合わせて
|
#222 にて新しいPRを建てました。 |
コンフリクト解消お願いしますー |
解消しました。 |
return GetSafetyNetAttestationAsync(nonce); | ||
} | ||
|
||
/// <summary> | ||
/// Verification device information required for positive submissions | ||
/// </summary> | ||
/// <returns>Device Verification Payload</returns> | ||
async Task<string> GetSafetyNetAttestationAsync(byte[] nonce) | ||
private static async Task<string> GetSafetyNetAttestationAsync(byte[] nonce) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Takym
質問のみですが、staticに変えた理由はありますか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Visual Studio から static
にして仮想化呼び出しを避ける様警告されたためです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Takym
私の環境(Mac)では警告が表示されずどのような意味を持った警告なのかわかりませんでした。
すみませんがその警告がどのような意味か教えていただいてもよろしいでしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そのメソッドがクラスのインスタンスに依存しないのであれば、staticを指定することで「インスタンスに依存しないこと」を明示できることに加えて、コンパイラがinline展開できるので実行パフォーマンスが上がったりして都合が良い。という話だと記憶しています。
少し前の情報ですが、それっぽい記事を見つけました。
https://ufcpp.net/blog/2018/12/devirtualization/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static
を付け静的関数にした場合、コンパイラは直接関数を呼び出す様にコードを生成します。
static
を外し動的関数にした場合、コンパイラは関数を仮想呼び出しするコードを生成します。
最近の Visual Studio では静的関数に変更できる関数は極力変更するよう警告を出してくれる様になりました。
また、static
を付ければ動的メンバーを参照しないという意思表示にもなります。
参考
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます
私自身がstaticを積極的に使ってこなかったというのもあり疑問に思ってしまいました。
腹落ちしました。
すみませんがコンフリクトの解消もお願いします |
コンフリクト解消しました。 |
Issue 番号 / Issue ID
目的 / Purpose
破壊的変更をもたらしますか / Does this introduce a breaking change?
Pull Request の種類 / Pull Request type
検証方法 / How to test
コードの入手 / Get the code
コードの検証 / Test the code
確認事項 / What to check
その他 / Other information
プロジェクトファイルの
DefineConstants
にREMOVE
を指定するとおおよそ元の状態に戻ります。