[C#] Constants Interfaces ของ Java เทียบเท่ากับอะไรใน C#

ก่อนจะมาเข้าเรื่องของ C# กันลองย้อนไปทาง Java ก่อน โดยเจ้าภาษา Java นี่ มันไม่มี Global Variables ให้ ซึ่งถ้าเราต้องการ Set ค่าคงที่แล้วต้องการให้ทุก Class เห็น และสามารถใช้งานได้ เราต้องทำ Constants Interfaces มองง่ายๆเลย คือ Interface ที่มีแต่ Constant แหละ ตามตัวอย่างเลย

//SecurityClassConst.java
public interface SecurityClassConst {
   public static final CASH = 1;
   public static final EQUITY = 2;
   public static final FIX_INCOME = 3;
   public static final DERIVATIVE = 4;
   public static final FOREX = 5;
}
//SecurityHelper.java
public class SecurityHelper implements SecurityClassConst {
   public String checkSecurityClass(Security pSecurity) {
      if(pSecurity.securityClassID == CASH)
         return "CASH";
      else if(pSecurity.securityClassID == EQUITY)
         return "EQUITY";
      else if(pSecurity.securityClassID == FIX_INCOME)
         return "FIX INCOME";
      else if(pSecurity.securityClassID == DERIVATIVE)
         return "DERIVATIVE";
      else if(pSecurity.securityClassID == FOREX)
         return "FOREX";
      else
         return "NOT FOUND MATCHING SECURITY CLASS";
   }
}

มาทาง C# บ้าง ทำไม่ได้ครับ (ส่วนตัว ผมคิดว่าดีที่ C# ทำไม่ได้อ่า) เพราะมันแปลกๆกับการเอา Interface มาเก็บ Const และถ้ามีการจัดหมวดหมู่เยอะนี้ implement กันตาย แถมเป็น Anti-Pattern (ตามความเข้าใจของผม Interface ควรกำหนดการทำ มากกว่าจะไปกำหนด Data และพอทำเป็น Interface มันดันกลายเป็นการทำ public API ให้ชาวบ้านเห็นอีก โดยทางฝั่ง Java เองแนะนำให้ใช้เป็น static import แทนครับ) วกกลับมาสำหรับ C# ถ้าจำเป็นต้องทำให้ทำเป็น abstract class แทนครับ ดังตัวอย่าง

//SecurityClassConst.cs
public abstract class SecurityClassConst {
   static const int CASH = 1;
   static const int EQUITY = 2;
   static const int FIX_INCOME = 3;
   static const int DERIVATIVE = 4;
   static const int FOREX = 5;
}

แต่สำหรับเคสนี้ ควรทำเป็น Static Class (ใน C# กับ Java ไม่เหมือนกันนะครับ) ทำเป็น Global Variable ดีกว่านะครับ แต่ควรวางให้มันเห็นทั้ง Solution นะครับ (พอดีเคสที่ทำงานจริงไปเจอตอเข้า เพราะ ดันไปวาง static class ให้ project A ในชั้น UI และพอจะนำมาให้กับอีก project B ในชั้น Service พวก Business มันดันไม่เห็น (Framework ออกแบบให้ UI เห็น Service แต่ Service มันไม่เห็น UI พอย้ายไปใส่ DTO ซึ่งเป็นตัวกลางพวกที่อ้างอิงในฝั่ง UI มันบึ้มหมด เลยต้องใช้วิธีนี้แทน)  ก็เลยนึกวิธีของ Java ที่มี Interface Const ได้ และปรับๆจนมาเป็น Abstract Class นี่แหละครับ หลังจบงานคงต้องปรับให้มันเข้าที่ T___T


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.