Обратите внимание на класс «MAIN», в который помещается элемент, например
<div class="container">
<ul class="select">
<li> First</li>
<li>Second</li>
</ul>
</div>
. В приведенном выше сценарии объект MAIN, который будет наблюдать jQuery, является «контейнером».
Тогда вы в основном будете иметь имена элементов в контейнере, такие как ul
, li
и select
:
$(document).ready(function(e) {
$('.container').on( 'click',".select", function(e) {
alert("CLICKED");
});
});
Я смешиваю здесь две разные вещи?
blockquote>Да.
Первый случай касается зависимостей во время выполнения , в то время как второй случай касается зависимостей во время компиляции .
Например, во время выполнения бизнес-уровень может вызывать функции / методы, реализованные на уровне базы данных. Но во время компиляции код бизнес-уровня не упоминает никакого кода на уровне базы данных. Обычно это достигается с помощью полиморфизма.
Я полагаю, что это может говорить о некоторых одинаковых принципах, но на разных уровнях детализации. Однако я бы все равно рассматривал Deverdency Inversion как нечто, что стоит само по себе.
В первом случае рассмотрим этот пример - в простой многоуровневой архитектуре у вас может быть уровень представления, встроенный в JavaScript, уровень бизнес-логики, встроенный в Java, и уровень данных в SQL Server. Эти слои могут быть разработаны различными группами людей. Уровень представления знает, как выполнять вызовы API на уровне бизнес-логики, но не наоборот. Уровень бизнес-логики знает, как читать / записывать на уровень базы данных и обратно, но не наоборот. Различие здесь происходит на высоком уровне - вы можете даже назвать это концептуальным.
Во втором случае вы хотите предотвратить сценарии, в которых предположительно универсальный код зависит от конкретных реализаций - и на этом этапе я рассматриваю его как относительно низкоуровневую проблему, которая попадает в область действия конкретного приложения (то есть в коде). не концептуально, как в предыдущем примере). Если у вас есть код, который пишет в базу данных, но вы хотите поддерживать различные реализации - например, MySQL и SQL Server, где каждый из них может иметь некоторые специфические сложности, не делают вызывающий код явно зависимым ни от одного из них - абстрагируют от сложности интерфейс. Это то, к чему обращается Принцип обращения зависимостей (см. Ниже).
public class UserService {
public UserRepository repository;
public void setUserRepository(UserRepository repository) {
this.repository = repository; //Is this a MySqlRepository or a SqlServerRepository? We don't care - the dependency is managed outside and we can change it without changing this class.
}
public void persistUser() {
this.repository.persist(user); //We just care about the abstraction - the interface.
}
}