бизнес-классы для многоязычного проектирования баз данных - PullRequest
1 голос
/ 30 мая 2009

Я разместил здесь вопрос о проектировании мультиязычной базы данных,
[] Каковы лучшие практики для проектирования многоязычных баз данных?
Мне нравится предложение Мартина, но теперь вопрос, что будет лучшим способом создания бизнес-объектов? Если я создам продукт, который будет содержать объект ProductTranslation, привязка и работа в пользовательском интерфейсе будет сложной, если только для локализованного объекта мне придется создавать другие объекты для CMS
Большое спасибо!

1 Ответ

2 голосов
/ 30 мая 2009

Сложно ответить, так как это зависит от ваших конкретных потребностей. Что мы имеем в одном месте, так это (на основе модели БД, описанной в другом вопросе):

  • бизнес-объекты моделируются после базы данных, что означает, что у нас есть класс Product, который имеет коллекцию объектов ProductTranslation
  • в классе Product у нас есть свойства для многоязычных данных, например, Описание
  • Получатель этих свойств ищет правильный объект перевода (на основе текущего языка) и возвращает соответствующее значение

очень простой пример (показаны только соответствующие части):

class ProductTranslation
{
    public string Description;
}
public class Product
{
    private List<ProductTranslation> _translations;

    private ProductTranslation GetTranslation(string language)
    {
        // return translation for specified language
        // or return translation for default language           
    }

    public string Description
    {
        get
        {
            return GetTranslation(GetCurrentLanguage()).Description;
        }
    }       
}

Мы выбрали этот подход для веб-приложения ASP.NET. CurrentLanguage может отличаться для каждого пользователя (пользователи могут выбирать предпочитаемый язык для пользовательского интерфейса и данных). Этот подход позволяет нам кэшировать данные глобально для всех пользователей.

В зависимости от ваших потребностей этот подход может быть не лучшим. Например. может быть, лучше смоделировать таблицы Product и ProductTranslation как один бизнес-объект (Product), который затем загружается для определенного языка (например, если данные предназначены только для чтения и не требуется кэшировать их для всего приложения).

...