gpt4 book ai didi

c# - 您如何处理用户偏好?

转载 作者:太空狗 更新时间:2023-10-29 20:25:48 27 4
gpt4 key购买 nike

与大多数软件一样,用户可以指定他们希望如何处理某些事情。在我的例子中,用户可以指定他们喜欢哪种格式。有 3 个选项,保留未格式化、驼峰大小写或适当的大小写。我目前正在使用它,但感觉非常笨重和重复。这是类(class)的一员。

public static class Extensions
{
public static string GetPreferenceFormattedText(this string text, ApplicationPreferences applicationPreferences, bool pluralize)
{
if (applicationPreferences.FieldNamingConvention.Equals(FieldNamingConvention.SameAsDatabase))
return text;
string formattedText = text.Replace('_', ' ');
formattedText = formattedText.MakeTitleCase();
formattedText = formattedText.Replace(" ", "");

if (applicationPreferences.FieldNamingConvention.Equals(FieldNamingConvention.Prefixed))
return applicationPreferences.Prefix + formattedText;

return applicationPreferences.FieldNamingConvention.Equals(FieldNamingConvention.CamelCase)
? formattedText.MakeFirstCharLowerCase()
: formattedText;
}
}

该方法本身并不笨拙。这就是它被调用的方式。每次我想获取格式化文本时都必须传递用户首选项似乎不是最好的方法。我是否最好创建一个常规类并通过构造函数传递应用程序首选项对象?

谢谢。

最佳答案

一个选择是创建某种工厂类,然后您可以使用包含首选项的类实例实例化工厂类,或从该类实例实例化工厂类。

使用工厂类,您可以获得一个 TextFormatter,返回的格式化程序实例将取决于首选项。

这是一个非常简单的例子,只是为了用一些代码来阐明我的答案。这不是特别花哨,可能会使用更复杂的模式,但希望它是正确的起点。

定义接口(interface)和一些格式化程序

  public interface IIdentifierFormatter
{
string FormatText(string text);
}

public class UnformattedIdenifierFormatter : IIdentifierFormatter
{
public string FormatText(string text)
{
return text;
}
}

public class CamelCaseIdenifierFormatter : IIdentifierFormatter
{
public string FormatText(string text)
{
// Camel case formatting here
return text;
}
}

public class ProperCaseIdenifierFormatter : IIdentifierFormatter
{
public string FormatText(string text)
{
// Proper case formatting here
return text;
}
}

现在是示例偏好类

  enum NamingConvention 
{
Unformatted,
CamelCase,
ProperCase
}

public class Preferences
{
public NamingConvention FieldNamingConvention { get; set; }
// .. Other settings


// Function to get the formatter depending on the FieldNamingConvention
public IIdentifierFormatter GetFieldNameFormatter()
{
switch (FieldNamingConvention)
{
case NamingConvention.Unformatted:
return new ProperCaseIdenifierFormatter();
case NamingConvention.CamelCase:
return new ProperCaseIdenifierFormatter();
case NamingConvention.ProperCase:
return new ProperCaseIdenifierFormatter();
default:
throw new Exception("Invalid or unsupported field naming convention.");
}
}
}

使用代码

// Preferences loaded from some source,
// for the example I just initialized it here.
Preferences pref = new Preferences();
pref.FieldNamingConvention = NamingConvention.CamelCase;

// Get the formatter
IIdentifierFormatter formatter = pref.GetFieldNameFormatter();

string formatted = formatter.FormatText("the_name_to_format");

关于c# - 您如何处理用户偏好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com