PDA

View Full Version : برنامه چند زبانی



omid_csh
پنج شنبه 29 خرداد 1393, 07:22 صبح
در حال پیاده سازی یک برنامه ویندوزی چند زبانه با معماری چند لایه هستم که به مشکلی برای دسترسی به فایلهای resource برخوردم.در این برنامه میخوام برای عنوان فیلدها در لایه core که در برگیرنده کلاس های مربوط به code first هستش، بصورت چند زبانه عمل کنم. از طرفی در لایه UI هم باید چند زبانه باشه. فایل های resource در لایه UI قرار داره. اگه بخوام از این ریسورس ها تو لایه core استفاده کنم، چه راه حلی پیشنهاد می کنید؟

plus
پنج شنبه 29 خرداد 1393, 13:35 عصر
یک راه این هست که کلا Resource های مربوط به چند زبانی رو در Core قرار بدین.البته من در مورد نام گذاری فیلدها در EF نمیدونم، اما اگه میشد که کل Resource ها در UI قرار بگیره میتونست بهتر باشه.

omid_csh
جمعه 30 خرداد 1393, 02:08 صبح
ممنون از پاسختون.
ولی این روش به نظرم با قواعد معماری لایه ای سازگار نباشه و این Resourceها مربوط به لایه UI باشه. بیشتر دنبال یک Best Practice برای انجام این کار هستم.

plus
جمعه 30 خرداد 1393, 12:06 عصر
ممنون از پاسختون.
ولی این روش به نظرم با قواعد معماری لایه ای سازگار نباشه و این Resourceها مربوط به لایه UI باشه. بیشتر دنبال یک Best Practice برای انجام این کار هستم.
خوب گذاشتن همه در Resource های UI چه مشکلی ایجاد میکنه؟
البته من نرم افزارهای معروفی رو دیدم که بجای استفاده از Resource برای نگه داری این مقادیر، از دیتابیس استفاده میکنن.

omid_csh
جمعه 30 خرداد 1393, 21:29 عصر
اگه بخوام اینارو توی UI بذارم دیگه توی لایه Core نمیتونم ازش استفاده کنم. نمیشه ارجاعی از UI در Core قرار داد.
برای مثال لایه core کلاس Unit بصورت زیر هستش.


using System.Data;
using System.ComponentModel.DataAnnotations;
using Accounting.Core.Common;


namespace Accounting.Core.Domain.Products
{
public partial class Unit : BaseEntity
{
/// <summary>
/// Gets or sets the unit Id
/// </summary>
[Key]
[Display(Name = "کد واحد")]
[DataGridColumn(Width=50f, IsShow = true)]
[Required(AllowEmptyStrings = false, ErrorMessage = "کد واحد را وارد نمایید")]
public string Id { get; set; }

/// <summary>
/// Gets or sets the unit name
/// </summary>
[Display(Name = "نام واحد")]
[DataGridColumn(Width = 130f, IsShow = true)]
[Required(AllowEmptyStrings = false, ErrorMessage = "نام واحد را وارد نمایید")]
public string Name { get; set; }
}
}

plus
شنبه 31 خرداد 1393, 08:02 صبح
پیشنهاد من این هست که د;ر صورت امکان، شما ErrorMessage ها و نام فیلدها رو در سطح UI فرمت کنید و از این امکانات EF استفاده نکنید.
الان شما اینجا علاوه بر متن ها، حتی اندازه ستون های گرید رو هم در Core تعریف کردین که این ارتباط از Core به UI کلا فلسفله ایجاد Core رو زیر سوال میبره...

omid_csh
شنبه 31 خرداد 1393, 22:16 عصر
نظر شما به اضافه کردن یک Class Library جدید و استفاده از آن در لایه Core و UI چیه؟

plus
شنبه 31 خرداد 1393, 23:09 عصر
بستگی داره دقیقا چکار کنید...اما منطقی تر هست که کل کار سمت UI باشه.