好的,这就是我最终得到的解决方案(我敢肯定,这不是最好的解决方案,但足够灵活,可以满足我的需求):
由于我的业务层中的所有操作结果都由枚举表示(例如-EmployeeAddition.SameNameExists 或DepartmentDeletion.DepartmentNotEmpty),因此创建一个描述与这些枚举相关的文本消息的实体类相当简单:
public class ConfigurableText : Entity
{
public virtual int TextId { get; private set; }
public virtual TextType TypeOfText { get; set; }
public virtual int EnumValue { get; set; }
public virtual string MainLanguageText { get; set; }
public virtual string SecondaryLanguageText { get; set; }
public virtual string Description { get; set; }
public ConfigurableText()
{
TypeOfText = ConfigurableText.TextType.PassengerMessage;
EnumValue = 0;
Description = string.Empty;
TextId = GetTextId(TypeOfText, EnumValue);
}
public ConfigurableText(TextType type, int enumValue,string mainLanguageText,string description) : this()
{
TypeOfText = type;
EnumValue = enumValue;
MainLanguageText = mainLanguageText;
Description = description;
TextId = GetTextId(TypeOfText, EnumValue);
}
public ConfigurableText(TextType type, int enumValue,string mainLanguageText, string description, string secondaryLanguageText) : this(type,enumValue,mainLanguageText,description)
{
SecondaryLanguageText = secondaryLanguageText;
}
public enum TextType
{
EmployeeMessage = 1,
DepartmentDeletionMessage,
//...
}
public static int GetTextId(TextType type, int enumValue)
{
return int.Parse(((int)type).ToString() + "00"
+ enumValue.ToString() + "00");
}
}
然后,客户端应用程序就开始了:
var ctrl = new TextsManagementController();
ConfigurableTextPO message = ctrl.GetText(ConfigurableText.TextType.EmployeeMessage, (int)this.Validity);
MessageMainLanguage = message.MainLanguageText;
由于我使用的是 nHibernate 的二级缓存,因此数据库(几乎)从未命中,因此性能不应该成为问题。
当然,构建用于更新这些实体的 GUI 是没有问题的。
它的缺点是,对于我希望能够配置的每一位文本,我都必须定义一个枚举,并在需要时手动检索这些值。