Skip to content

Latest commit

 

History

History
51 lines (47 loc) · 3.98 KB

File metadata and controls

51 lines (47 loc) · 3.98 KB

Architecture & Design

Questions

  • Inversion of Control
    • What is IoC?
    • What are the advantages of frameworks providing IoC over libraries?
    • What are the advantages of libraries without IoC over frameworks?
    • Can a module provide an interface that supports both approaches: with IoC and without IoC?
  • Dependency Injection
    • What is DI?
    • What are the alternatives to DI? What are the advantages and disadvantages of each alternative?
    • Can DI be implemented without IoC?
    • How does DI help to achieve the Separation of Concerns?
    • How are DI and Dependency Inversion Principle from SOLID related to each other?
  • What is Impedance Mismatch? What are the examples of Impedance Mismatch in different technologies? What are the most popular patterns of solutions?
  • What problems can be caused by premature optimization? How to solve troubles with performance while avoiding premature optimization?
  • What are the benefits of providing an API with different levels of abstraction?
  • Why do callbacks break composability?
  • Large Scale JS
    • What is the main idea of the proposed approach?
    • What patterns are used in this approach?
    • What is the role of events in this approach? Can the similar approach be implemented only with synchronous function invocations?
    • How does it help to achieve fault tolerance?
    • How can modules depend on each other?
  • Module API
    • What are the characteristics of a good module API?
    • How can we make an API hard to misuse? What are the benefits of this characteristic?
    • What are consistency and conceptual integrity properties of API? Why are the properties valuable?
    • How does writing use cases before writing code can help to achieve cleaner API?
    • What is the difference between extensibility by the module authors and module clients?
    • How can you explain the phrase "asymmetry of function should be reflected by asymmetry of form"?
    • How names used in your module API can reflect structure of your module and increase cohesion inside various parts of your contract?
    • What are the edge cases in the context of designing an API? Why is the implicit edge case handling preferred to explicit?
    • What is the rule "The best API is no API" about? What are the examples of breaking the rule?
  • How does modular programming help us to achieve better local reasoning while developing a module?
  • What are the benefits of declaring an explicit contract between a client and a person who implements a module?
  • What is the difference between abstraction by parameterization and abstraction by specification?

Links

  1. How To Design Better JavaScript APIs (little bit opinionated post, don't consider as perfect guide)
  2. Library patterns Multiple levels of abstraction
  3. Library patterns Why frameworks are evil
  4. A quick intro to Dependency Injection: what it is, and when to use it [Перевод]
  5. Inversion of Control Containers and the Dependency Injection pattern
  6. Dependency injection (from Wikipedia)
  7. The Little Manual of API Design
  8. Modular Programming: Modules and Signatures
  9. Patterns For Large-Scale JavaScript Application Architecture
  10. Создание архитектуры программы или как проектировать табуретку