お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。

最近思っているNext.jsを使った画面設計に関する考えを箇条書きで雑に殴り書きしていく。この記事は考えの垂れ流しなので深い説明はしない。AppRouterではなく、PageRouterの考え。

  • TypeScriptで実装し、型が騙せるような実装は極力避け、コードによる戻り値の型指定は不具合の原因になることがあるため、可能な限り型推論に任せる
  • SOLIDな設計を意識することで疎結合でテストしやすい設計になる
  • Clean Archtectureを意識することでSOLIDのSを意識しやすくなる
    • 画面として考える場合、実装レイヤーとしてはAPIを呼ぶ以外何もしないAdapter、ビジネスロジックやイベントハンドリングの実処理などを行うController、画面要素を配置しただけのView、画面状態を保持するState、それらをつなぎ合わせるUsecaseが、Usecaseを置くだけのPage(Next.jsのpageコンポーネントに埋め込むコンポーネント)、SSGやSSRをする場合のServer Side Controllerがあるとよいと考えている。大まかには下図のような感じで考えていて、過去の実務でもこれに相当するものを作ったことがある。
      think-archtecture-diagram.png
    • ただこれはModelに相当するものがなく、ビジネスロジックの共通化に課題が出てくるのと、ControllerがFatになりすぎると考えており、そこが課題になると考えている。
  • テストが容易なコードは必然的に疎結合になる
  • 疎結合にする場合、命名を抽象的にしておくと処理の入れ替えが容易になる(命名が具象、つまり実装の詳細に依存しないため)
  • 疎結合にするとパーツが増えるので認知負荷が上がる
  • 疎結合でかつ、命名が抽象化されている場合、仕様を知らない人にとっては実際の処理内容を推測しづらくなる
    • つまりこれは属人性が増えると考える
  • 例外についてはErrorクラスを継承し、カスタム例外を作成して、用途に応じたハンドリングができるようにする
    • 原則として処理を止める場合にのみ用いるべきで、続行する場合には使わない
    • 例外は原則としてスローして、カスタムエラーは特定の階層でフィルタしてハンドリング、全てすり抜けてきたものはルート処理でキャッチしてハンドリングすることで、取りこぼしをゼロにする。例外の握り潰しは原則行わない
      • 基本的にすべてロギングする
    • 処理を継続するものについては例外とせず、ワーニング用の処理フローを作成し、それに則って行う(例えば入力バリデーションはワーニング)
投稿日:
言語::C#.NETライブラリ::Windows Form

C#を使ったWindows Formでなんでもいいから通知を出したかった。

確認環境

Env Ver
Windows 11 Pro 22631.4751
.NET 8.0
C# 12

手順

  1. Windows Formでプロジェクトを作る
  2. デザイナにNotifyIconを突っ込む
    paste-image-2025-10-23_16-9-15-939.png
  3. デザイナでNotifyIconに適当なアイコンを設定する
  4. 適当な場所に以下を書く
    notifyIcon1.BalloonTipText = "ほげ";
    notifyIcon1.ShowBalloonTip(5000);
    

備考

アイコン設定してないと何も出てこないので注意。

クリック時に何かしたい場合、NotifyIconにイベントハンドラが生えてるのでそれを使う。

あとがき

ググるとDLLをコールしたり、Nugetを使ってUWPのコンポーネントを使ったりと、コレジャナイ情報ばっかり出てくるのだが、OSの機能なので標準で出せるんじゃね?と調べてたらここに突き当たった。