ทางเลือกการแก้ปัญหา
ใน บริษัท ของเราเราหลีกเลี่ยง "การกระโดดข้ามโครงการ" เพื่อไปยังโครงการระดับล่างทั่วไป ตัวอย่างเช่นเลเยอร์การนำเสนอ / API ของเราสามารถอ้างอิงชั้นโดเมนของเราเท่านั้นและชั้นโดเมนสามารถอ้างอิงชั้นข้อมูลได้เท่านั้น
อย่างไรก็ตามนี่เป็นปัญหาเมื่อมีจำนวน enums ที่ต้องมีการอ้างอิงโดยทั้งงานนำเสนอและชั้นโดเมน
นี่คือทางออกที่เราได้ดำเนินการ (จนถึงปัจจุบัน) มันเป็นทางออกที่ดีและทำงานได้ดีสำหรับเรา คำตอบอื่น ๆ ที่ถูกตีรอบนี้
หลักฐานพื้นฐานคือ enums ไม่สามารถสืบทอดได้ แต่คลาสสามารถทำได้ ดังนั้น...
// In the lower level project (or DLL)...
public abstract class BaseEnums
{
public enum ImportanceType
{
None = 0,
Success = 1,
Warning = 2,
Information = 3,
Exclamation = 4
}
[Flags]
public enum StatusType : Int32
{
None = 0,
Pending = 1,
Approved = 2,
Canceled = 4,
Accepted = (8 | Approved),
Rejected = 16,
Shipped = (32 | Accepted),
Reconciled = (64 | Shipped)
}
public enum Conveyance
{
None = 0,
Feet = 1,
Automobile = 2,
Bicycle = 3,
Motorcycle = 4,
TukTuk = 5,
Horse = 6,
Yak = 7,
Segue = 8
}
จากนั้นไปที่ "รับช่วง" จำนวนอื่นในโครงการระดับที่สูงขึ้น ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
นี่เป็นข้อได้เปรียบที่แท้จริงสามข้อ ...
- คำจำกัดความ enum จะเหมือนกันโดยอัตโนมัติในทั้งสองโครงการ - ตามคำจำกัดความ
- การเปลี่ยนแปลงใด ๆ ในนิยาม enum จะถูกสะท้อนในวินาทีโดยอัตโนมัติโดยไม่ต้องทำการแก้ไขใด ๆ กับคลาสที่สอง
- enums นั้นใช้รหัสเดียวกัน - ดังนั้นจึงสามารถเปรียบเทียบค่าได้อย่างง่ายดาย (กับคำเตือน)
ในการอ้างอิง enums ในโครงการแรกคุณสามารถใช้คำนำหน้าของคลาส: BaseEnums.StatusType.Pendingหรือเพิ่ม"การใช้ BaseEnums แบบคงที่"คำสั่งการใช้งานของคุณ
ในโครงการที่สองเมื่อจัดการกับคลาสที่สืบทอดมา แต่ฉันไม่สามารถใช้วิธี "ใช้ static ... " ในการทำงานดังนั้นการอ้างอิงทั้งหมดกับ "สืบทอดมา enums" จะนำหน้าด้วยคลาสเช่นSubEnums.StatusType.Pending . หากใครมาพร้อมกับวิธีการอนุญาตให้"ใช้คงที่"ในโครงการที่สองแจ้งให้เราทราบ
ฉันแน่ใจว่านี่สามารถปรับแต่งเพื่อให้ดียิ่งขึ้น - แต่มันใช้งานได้จริงและฉันได้ใช้วิธีการนี้ในโครงการทำงาน
โปรดโหวตสิ่งนี้ถ้าคุณเห็นว่ามีประโยชน์