powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Архитектура
19 сообщений из 69, страница 3 из 3
Архитектура
    #38236540
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIcooldeveloperС каких это пор реализация классов SOA доступна для потребителей?!
ХЗ, возможно я и лоханулся, сейчас посмотрю...
Причем конкретно, друг мой. Готовь зад, я несу хлыст...
...
Рейтинг: 0 / 0
Архитектура
    #38236564
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAИ собственно по этому не вижу смысла обсуждать с Вами какие-то архитектурные решения и шаблоны проектирования.
Короче конкретного примера не будет Ну почему же. Пример проекта, что я уже описал в етме - это мой личный проект, в данный момент на стадии тестирования перед релизом и сборки интсаллятора, надеюсь в скором времени смогу дать ссылку на сайт.

Вот ссылка на проект с предыдущей работы. Ссылка на проект, что разрабатывается на текущем месте работы, в профиле.
...
Рейтинг: 0 / 0
Архитектура
    #38236572
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более 200 000 отелей по всему миру от глобальных поставщиков (GTA, Kuoni, Travco и пр.) и принимающих туроператоров Европы - это конечно не гостиничный комплекс, но что есть, то есть...
...
Рейтинг: 0 / 0
Архитектура
    #38236622
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperEDUARD SAPOTSKI... Такое ощущение, что ты инопланетянен. Ну или с SOA не работал и насилуешь нам тут моцк. Мало того, вебсервисы он wcf-ы называл, так еще и в dto он логику собрался поставлять через шлюзы. Пестец просто.ВикипедиЯ Сервис-ориентированная архитектура (англ. Service-oriented Architecture) — подход к разработке программного обеспечения на основе слабосвязанных компонентов, взаимодействующих посредством стандартизованных интерфейсов.EDUARD SAPOTSKIЭтими паттернами и "изысканными архитектурами" уже весь инет засрали, а когда дело до практики доходит, так никто не может внятно объяснить зачем это нужно !
МСУ, ему это не нужно, конечно он не работал.
...
Рейтинг: 0 / 0
Архитектура
    #38236651
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, не хотелось Эдюшку шпынять, нормальный парень, но достал уже ей богу...
...
Рейтинг: 0 / 0
Архитектура
    #38236663
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANA, не хотелось Эдюшку шпынять, нормальный парень, но достал уже ей богу...
Не парься, у меня отпуск, поэтому тут херней страдаю
...
Рейтинг: 0 / 0
Архитектура
    #38236682
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIпоэтому тут херней страдаю
Я так и понял.
Значит, вот тут ты нам аккуратно поднаврал?
EDUARD SAPOTSKIВидишь кролика? А он есть! (с)
А тут?
EDUARD SAPOTSKIНу хорошо, туризм так туризм. Имел честь учавствовать в разработке системы бронирования, для гостиничного комплекса.
Батенька, позволь нескромно поинтересоваться, на чем крутилась твоя системы бронирования, на DTO-логике в SOA?
...
Рейтинг: 0 / 0
Архитектура
    #38236700
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, вполне может оказаться, что под системой бронирование понимается: "позвонили в гостиницу на ресепшн, или пришли с паспортом, и ваши данные какая-то тётушка куда-то вбила".
...
Рейтинг: 0 / 0
Архитектура
    #38236716
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperЗначит, вот тут ты нам аккуратно поднаврал?
EDUARD SAPOTSKIВидишь кролика? А он есть! (с)
А тут?
EDUARD SAPOTSKIНу хорошо, туризм так туризм. Имел честь учавствовать в разработке системы бронирования, для гостиничного комплекса.
Не поверишь, но не совсем наврал, реально сто лет назад допиливали довольно "с виду" приличную систему.
cooldeveloperБатенька, позволь нескромно поинтересоваться, на чем крутилась твоя системы бронирования, на DTO-логике в SOA?
А от тут можешь сразу падать пацтол! На эксесе!
...
Рейтинг: 0 / 0
Архитектура
    #38236720
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, ну может и правда участвовал, просто дело далече, чем SqlCommand + SqlDataReader + DataSet не заходило. Эдичек ведь честный малый, а не врунишка форумный.
...
Рейтинг: 0 / 0
Архитектура
    #38236722
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIНе поверишь, но не совсем наврал, реально сто лет назад допиливали довольно "с виду" приличную систему.
Как мне нравятся такие ответы :)
...
Рейтинг: 0 / 0
Архитектура
    #38236744
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нить помнит как эту штуковину System.Web.HttpContext.GetGlobalResourceObject(key, value) заставить видеть внедрённые ресурсы? После деплоя папки с ресурсами нет (App_GlobalResources), они в dll теперь и данная штуковина всегда возвращает null. Ну а Project.App_GlobalResources.Key.Value прекрасно работает без данной папки.
...
Рейтинг: 0 / 0
Архитектура
    #38236864
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stПосле деплоя папки с ресурсами нет (App_GlobalResources), они в dll теперь и данная штуковина всегда возвращает null.
Это у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.
...
Рейтинг: 0 / 0
Архитектура
    #38236921
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperЭто у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.

Если отправлять содержимое ресурсов (content), тогда при деплое папка App_GlobalResources целиком перекидывается на хостинг и GetGlobalResourceObject() работает. А ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null, а если напрямую ресурс запросить через Project.App_GlobalResources.Key.Value, то работает. Просто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources и видеть скомпиленные в dll ресурсы, так же как их видит Project.App_GlobalResources. Мне не проблема при деплое копировать ресурсы как есть, без компиляции, вопрос интересен в теоретическом плане.
...
Рейтинг: 0 / 0
Архитектура
    #38236927
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Класс System.Web.UI.Page наследуется от класса System.Web.UI.TemplateControl, где есть метод:
Код: c#
1.
2.
3.
4.
protected object GetGlobalResourceObject(string className, string resourceKey)
{
    return ResourceExpressionBuilder.GetGlobalResourceObject(className, resourceKey, null, null, null);
}


Данный метод на странице вызывается к примеру так:
Код: c#
1.
this.Page.Title = Convert.ToString(this.GetGlobalResourceObject("WebResources", "PageTitle"));

и работает

А теперь смотрим класс System.Web.HttpContext:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public static object GetGlobalResourceObject(string classKey, string resourceKey)
{
    return HttpContext.GetGlobalResourceObject(classKey, resourceKey, null);
}

public static object GetGlobalResourceObject(string classKey, string resourceKey, CultureInfo culture)
{
    return ResourceExpressionBuilder.GetGlobalResourceObject(classKey, resourceKey, null, null, culture);
}


Вроде одинаково
...
Рейтинг: 0 / 0
Архитектура
    #38236950
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stcooldeveloperЭто у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.

Если отправлять содержимое ресурсов (content), тогда при деплое папка App_GlobalResources целиком перекидывается на хостинг и GetGlobalResourceObject() работает. А ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null, а если напрямую ресурс запросить через Project.App_GlobalResources.Key.Value, то работает. Просто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources и видеть скомпиленные в dll ресурсы, так же как их видит Project.App_GlobalResources. Мне не проблема при деплое копировать ресурсы как есть, без компиляции, вопрос интересен в теоретическом плане.А, вот оно чё, Михалыч! Чёрт его знает, что за фигня. Но!

Вы можете реализовать свой ResourceExpressionBuilder, наследника от System.Web.Compilation.ExpressionBuilder, где использовать свою реализацию IResourceProvider. И подключить это дело через конфиг:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<system.web>
  <compilation>
    <expressionBuilders>
      <add expressionPrefix="MyResources" type="MyAssembly.MyResourceExpressionBuilder, MyAssembly, Version=1.0.0.0, Culture=neutral"/>
    </expressionBuilders>
  </compilation>
</system.web>
...
Рейтинг: 0 / 0
Архитектура
    #38236957
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stА ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null
А зачем ставить ресурсу embedded, что за бред? Если уж нужен эмбдед, то вот так: http://codearticles.ru/home/articleview/1436

st_stПросто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources
Сомнитетельное какое-то желание...
...
Рейтинг: 0 / 0
Архитектура
    #38237526
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAиспользовать свою реализацию IResourceProvider

Окончательно ресурсы будут в бд + кэш. А про GetGlobalResourceObject() спросил, так как интересно было, чё он отвалился после деплоя без папки с ресурсами. dll открываешь и там видишь все эти ресурсы и также они доступны через Project.App_GlobalResources.Key.Value. Да и хрен с ним, не столь важно. Продолжайте дальше архитектуру обсуждать :)
...
Рейтинг: 0 / 0
Архитектура
    #38242594
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Воскрешу немного топик :)

skyANAarch2000Используете ли вы такую архитектуру или Ваш проект организован как-то по-другому?

- модели данных (классы что генерит EF, L2SQL и другие орм)
- модели представления - то, что передается во вьюхи
- репозитории где весь фунционал генерящий списки на основе модели данных для модели представления

В контроллерах вызываются методы из репозиториев, заполняется модель данных и передается в представлениеНе использую, т.к. мой проект организован по-другому.

- доменная модель (классы, выражающие сущности предметной области и классы-сервисы, реализующие бизнес-логику)
- модели данных, мапперы
- репозитории, что используются в классах-сервисах
- модели представления

1. Вопрос про модели - могут ли модели-представления содержать в себе логику, методы которые возвращают данные из этой же модели предоставления (например среднюю сумму по вложенным сущностям по каким либо полям), или свойства только для чтения например которое из Петров Иван Сергеевич, делает Петров И.С.

2. Вложенные сущности и репозитории - я тут запутался, объясню ситуацию.
Я описал интерфейс -
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public interface IRepository<TModel> : IDisposable
    {
        /// <summary>
        /// Вернуть коллекцию объектов, но не более 100 шт первых.
        /// </summary>
        /// <returns></returns>
        IEnumerable<TModel> GetList(int countItems = 100);

        IEnumerable<TModel> GetList(int page, int pageSize);

        /// <summary>
        /// Вернуть кол-во всех объектов
        /// </summary>
        /// <returns></returns>
        long Count();

        TModel GetById(long id);

        TModel Insert(TModel model);

        TModel Update(TModel model);

        void Delete(TModel model);

    }



Далее, сделал реализацию репозиторя дефолтувую:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
    public abstract class BaseRepository<TModel, TEntity> : IRepository<TModel> 
        where TEntity : class 
        where TModel :class 
    {
        protected readonly DbContext DB;
        protected readonly ObjectsMapper<TEntity, TModel> MapperModel = ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TModel>();
        protected readonly ObjectsMapper<TModel, TEntity> MapperEntity = ObjectMapperManager.DefaultInstance.GetMapper<TModel, TEntity>();

        public BaseRepository(DbContext db)
        {
            DB = db;
        }

        public BaseRepository()
        {
            DB = new RiskControlDb();
        }

        public virtual IEnumerable<TModel> GetList(int countItems = 100)
        {
            var entityQuery = DB.Set<TEntity>().AsQueryable();
            var entityList = Count() > countItems ? entityQuery.Take(countItems).ToList() : entityQuery.ToList();

            return entityList.Select(entity => MapperModel.Map(entity));
        }

        public IEnumerable<TModel> GetList(int page, int pageSize)
        {
            var list = DB.Set<TEntity>().AsQueryable();
            var count = Count();
            var pageCount = (count%pageSize == 0) ? count/pageSize : count/pageSize + 1;

            return list.Skip((page - 1)*pageSize).Take(pageSize).ToList().Select(entity => MapperModel.Map(entity));
        }

        public virtual long Count()
        {
            return DB.Set<TEntity>().LongCount();
        }
        
        public virtual TModel GetById(long id)
        {
            var collection = DB.Set<TEntity>();
            return MapperModel.Map(collection.Find(id));
        }

        public virtual TModel Insert(TModel model)
        {
            var entity = MapperEntity.Map(model);
            DB.Set<TEntity>().Add(entity);
            DB.SaveChanges();

            return MapperModel.Map(entity);
        }

        public virtual TModel Update(TModel model)
        {
            var entity = MapperEntity.Map(model);
            DB.Entry(entity).State = EntityState.Modified;
            DB.SaveChanges();

            return MapperModel.Map(entity);
        }

        public virtual void Delete(TModel model)
        {
            DB.Set<TEntity>().Remove(MapperEntity.Map(model));
            DB.SaveChanges();
        }

        public virtual void Dispose()
        {
            DB.Dispose();
        }
    }



Для создания репозитория для любой модели выглядит след-щим образом:
Код: c#
1.
2.
3.
4.
public class BranchRepository : BaseRepository<BranchModel, BranchEntity>
    {
        
    }



И все теперь для большинства сущностей написать репозиторий дело 2-х минут.

Собственно вопрос - имеем следующее:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
public class ClientModel
    {
        public int Id { get; set; }

        public string NameShort { get; set; }

        public string AddressFirst { get; set; }

        public string Phone { get; set; }

        public string Email { get; set; }

        public string DefaultDocument { get; set; }

        public string Branch { get; set; }

        public ICollection<DocumentModel> Documents { get; set; }
    }

    public class BranchModel
    {
        public int Id { get; set; }

        public string Brief { get; set; }

        public string Description { get; set; }

    }

    public class DocumentModel
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }

    public class Client
    {
        public int Id { get; set; }

        public string NameShort { get; set; }
        
        public string AddressFirst { get; set; }
        
        public string Phone { get; set; }
        
        public string Email { get; set; }

        public string BranchId { get; set; }

        public Branch Branch { get; set; }

        public virtual ICollection<Document> Documents { get; set; }
    }

    public class Branch
    {
        public int Id { get; set; }

        public string Brief { get; set; }

        public string Description { get; set; }

        internal bool IsDelete { get; set; }

        public virtual ICollection<Client> Clients { get; set; }
    }

    public class Document
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int ClientId { get; set; }

        public Client Client { get; set; }
    }

    public class SampleDb : DbContext
    {
        public DbSet<Client> Clients { get; set; }
        public DbSet<Branch> Branches { get; set; }
        public DbSet<Document> Document { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Client>().HasRequired(c => c.Branch);
            modelBuilder.Entity<Document>().HasRequired(c => c.Client);
        }
    }



Получается что докумет не может существовать без клиента и как в этом случае должен быть реализован репозиторий?
Это в репозитории по клиенту добавить методы InsertDocument, UpdateDocument, DeleteDocument, GetDocumentBy....

Или в репозиторий по документу должен быть самостоятельным, но тогда в модель по документу добавится свойство ClientId - которое как мне кажется не имеет отношение к Модели представлению документа и так же не подходит к реализации IRepository?
...
Рейтинг: 0 / 0
19 сообщений из 69, страница 3 из 3
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Архитектура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]