2

我将使用 WebForms 制作一个词汇表(用于 N 种语言),我将为我的所有 Web 应用程序共享。

像 MyLanguages.cs。然后我将创建静态方法来获取我的话。但是我不会将它用于我的所有应用程序,只为所有应用程序提供一个(一个在内存中,而不是 N)。

您可以向我建议的最佳策略是什么?

例子

这应该是我的课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class Vocabulary
{
    public const string HelloEnglish = "Hello";
    public const string HelloItalian = "Ciao";

    public Vocabulary()
    {

    }
}

而且,在我的 Web 应用程序的任何地方,我都想调用:

Vocabulary.HelloEnglish;

无需为每个 Web 应用程序复制和继承该类,这始终是相同的……浪费资源……还因为它会增长……

4

5 回答 5

3

我建议您使用资源并将它们本地化。

于 2012-03-30T15:02:34.713 回答
1

将其作为WCF Windows 服务运行。

于 2012-03-30T14:55:03.853 回答
0

为了避免 Window Service 的部署问题,您可以在您的一个应用程序中托管此词汇表(第一个已启动),并且所有其他应用程序都可以连接到该主机。应用程序之间的互操作有多种方式 - tcp、命名管道(两者都可以与 WCF 一起使用)、COM 等。而且您不必担心程序集本身的内存,因为 Windows 将在使用此程序集的所有应用程序之间共享相同的实例

于 2012-03-30T15:04:08.047 回答
0

从长远来看,这样的课程管理起来会很混乱。

如果你需要一个类,更好的方法是创建一个接口 Ivocabulary,它具有属性“Hello”。为尽可能多的语言实现它。然后,您可以保留一个单音类。此类可以返回 Ivocabulary 的实例。您还可以使用 SetVocabulary(string language) 方法在运行时更改语言。

public interface IVocabulary
{
    string Hello { get; }
}

public class EnglishVocabulary : IVocabulary
{
    public string Hello
    {
        get { return "Hello"; }
    }
}

public class ItalianVocabulary : IVocabulary
{
    public string Hello
    {
        get { return "Ciao"; }
    }
}

public class CurrentVocabulary
{
    private static IVocabulary instance;

    private CurrentVocabulary()
    {
    }

    public static IVocabulary Instance
    {
        get
        {
            return instance;
        }
    }

    public static void SetVocabulary(string language)
    {
        switch (language.ToLower())
        {
            case "english":
                instance = new EnglishVocabulary();
                break;
            case "italian":
                instance = new ItalianVocabulary();
                break;
            default:
                throw new ArgumentException("Language " + language + " not available.");
                break;
        }
    }
}

但是,将语言存储在数据库中是迄今为止最好的动态方法。您可以将类似的模型用于数据库驱动的解决方案。

于 2012-03-30T15:40:25.893 回答
0

我只是将它存储在数据库中,添加新的语言和单词将是微不足道的,并且不需要重新编译任何东西。这也可以让您在检索时更有活力。

于 2012-03-30T15:01:48.490 回答