<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум ReadyScript &mdash; Расширение функционала путем наследования и инверсия управления]]></title>
	<link rel="self" href="https://forum.readyscript.ru/feed/atom/topic/816/" />
	<updated>2016-09-01T23:32:47Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.readyscript.ru/topic/816/rasshirenie-funktsionala-putem-nasledovaniya-i-inversiya-upravleniya/</id>
		<entry>
			<title type="html"><![CDATA[Re: Расширение функционала путем наследования и инверсия управления]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/4433/#p4433" />
			<content type="html"><![CDATA[<p>DI (Dependency Injection) - довольно удобная вещь, но на статически расширяемых фреймворках. Где расширение происходит программистом, путем прописывания нового модуля вручную в конфиг и где полный набор модулей заранее известен разработчику, таким образом он всегда знает, кто перегружает тот или иной класс, опираясь на свой же конфиг.</p><p>Наша же архитектура - динамически расширяема. ReadyScript у всех пользователей работает с разным набором модулей, которые привносятся в систему в разном порядке. Иными словами вы в своем модуле никогда не будете знать кто сейчас перегрузил класс, который вы хотите использовать, модуль &quot;a&quot; или модуль &quot;b&quot;, а может есть какой-то модуль &quot;d&quot;, который это делает. Тем самым в динамических платформах - это способно внести определенный хаос в работу системы и в стабильность работы системы. </p><p>Вы можете ожидать, что установили свой модуль и перегрузили какой-то класс, а на самом деле Пользователь установил затем другой модуль, который тоже перегрузил этот же класс, в итоге вы будете обращаться к несуществующим методам.</p><p>У нас вместо этого реализовано огромное множество альтернативных приемов перегрузки и расширения стандартной функциональности. Можем, например, обсудить какую задачу вы не смогли решить, думаю подскажем какое решение можно применить.</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://forum.readyscript.ru/user/2/</uri>
			</author>
			<updated>2016-09-01T23:32:47Z</updated>
			<id>https://forum.readyscript.ru/post/4433/#p4433</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Расширение функционала путем наследования и инверсия управления]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/4103/#p4103" />
			<content type="html"><![CDATA[<p>Для изменения и дополнения классов используется наследование, однако здесь его применить не удается. Если я создам наследника какого-то класса, то остальные классы системы об этом не узнают, и будут продолжать использовать оригинальный класс. Проблемы можно избежать, если методы будут манипулировать не конкретными классами, а интерфейсами, а объекты будут создаваться не по месту использования с указанием конкретного класса, а при помощи некого настраиваемого программного механизма, и можно будет указать, какой класс для реализации какого интерфейса использовать.<br />По ссылкам более детально о том, что я имею в виду:<br /><a href="https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F">https://ru.wikipedia.org/wiki/%D0%98%D0 … 0%B8%D1%8F</a><br /><a href="https://habrahabr.ru/post/132084/">https://habrahabr.ru/post/132084/</a></p>]]></content>
			<author>
				<name><![CDATA[karpen]]></name>
				<uri>https://forum.readyscript.ru/user/383/</uri>
			</author>
			<updated>2016-07-24T08:48:54Z</updated>
			<id>https://forum.readyscript.ru/post/4103/#p4103</id>
		</entry>
</feed>
