Pull to refresh

Comments 12

PinnedPinned comments

Да, контексты из React позволяют реализовать DI, однако, при их композиции могут возникать трудности, связанные с тем, что порядок объявления описывается руками, а не вычисляется по требованию. См. вышеупомянутые AuthService и SessionService

Ещё один кейс. Думаю, каждый сталкивался с ролевой моделью. Если в случае с объектом ioc для переключения роли достаточно написать в консоли ioc.roleModelService.setRoles(["admin"]), то с контекстами придется патчить код или менять моки, что на большом проекте сложно

Для табличек и списочных форм, да. Эта статья скорее для тех, кто пишет что-то вроде Visual Studio Code, этот редактор тоже сайт, который открывается в Electron

https://github.com/microsoft/vscode/tree/main/src/vs/editor/browser/services

Что это было, Бэрримор? Я одного не понимаю -- какую проблему решает этот код?

Овсянка, сер! Это для любителей, которые хотят сделать для React сервисы как в Angular2)

Я не вижу профита от всей этой горы кода. Становится ли код проще для сопровождения? Не наблюдаю. Что по производительности? Что по размеру бандла?

Mobx тратит меньше оперативной памяти, для мобилок критично, как по батарейке, так и по производительности, сборка мусора останавливает приложение

Через ioc достучаться до стейта приложения можно откуда угодно. В том числе из дебаггера, отладка проще

Сопровождение проще, так как не нужно описывать провайдеры (контексты) или boilerplate. После написания базовых сервисов, скорость разработки выше

Размер бандла изменится не сильно, тот же самый код всё равно придется где-то расписать, например, в action-creators, middlewares и reducers. Однако, с классами проще избежать копипасты, на проектах с уже плохим кодом размер бандла, если откатить время назад и взят Mobx+DI, мог бы быть меньше.

Спасибо. Буду повторно читать. Статью об i18nano я перечитывал кучу раз, пока не понял, что все ответы на мои вопросы есть в примерах кода

Через ioc достучаться до стейта приложения можно откуда угодно.

Сопровождение проще, так как не нужно описывать провайдеры (контексты) 

Так вроде один раз достаточно описать провайдер\контекст и ioc не нужен.. разве нет?


// infrastructure.js
const StoresContext = createContext();

class RootStore {
  constructor() {
    this.service1 = new Service1(this);
    this.service2 = new Service2(this);
    this.service3 = new Service3(this);
    
    // внутри сервисы через this.rootStore доступны друг другу 
    // и с помощью mobx-реакций могут внутри себя подписаться на другие сервисы 
  }
}


export const StoresProvider = (props) => {
  const rootStore = new RootStore();

  return (
    <StoresContext.Provider value={rootStore}>
      {props.children}
    </StoresContext.Provider>
  );
};

export const useStore = () => {
  return useContext(StoresContext);
};

// index.js
ReactDOM.render(<StoresProvider><MySuperApp /><StoresProvider>, document.getElementById('root'));

И дальше где угодно

// some deep component
export const MyDeepComponent = observer(() => {
	const { service1, service3 } = useStore();

	return <button onClick={service3.someMethod}>{service1.someValue}</button>
});

Да, контексты из React позволяют реализовать DI, однако, при их композиции могут возникать трудности, связанные с тем, что порядок объявления описывается руками, а не вычисляется по требованию. См. вышеупомянутые AuthService и SessionService

Ещё один кейс. Думаю, каждый сталкивался с ролевой моделью. Если в случае с объектом ioc для переключения роли достаточно написать в консоли ioc.roleModelService.setRoles(["admin"]), то с контекстами придется патчить код или менять моки, что на большом проекте сложно

Для табличек и списочных форм, да. Эта статья скорее для тех, кто пишет что-то вроде Visual Studio Code, этот редактор тоже сайт, который открывается в Electron

https://github.com/microsoft/vscode/tree/main/src/vs/editor/browser/services

а где можно посмотреть исходный код из статьи ? хотелось бы поближе посмотреть как это все работает, особенно самописный DI класс, не до конца понял как там инъекции происходят, а так спасибо за статью видно что продвинутая тема и код тоже)

Много времени прошло, успел написать автогенерацию UML диаграмм из TypeScript кода в yaml, чтобы делать красивую документацию, асинхронные инъекции через dynamic import, локальные сторы для роутов module federation...

В организации есть несколько проектов, на примере react-pocketbase-crm можно посмотреть DI в действии

Sign up to leave a comment.

Articles