github twitter email rss
0001 Jun 1
4 minutes read

http://en.wikipedia.org/wiki/Software_design
http://en.wikipedia.org/wiki/Requirements_analysis#Software_requirements_specification
http://en.wikipedia.org/wiki/Software_Requirements_Specification
http://en.wikipedia.org/wiki/Systems_design
http://en.wikipedia.org/wiki/Business_rule
http://en.wikipedia.org/wiki/Business_rules_engine

patterns

cost
benefits
trade offs

mvc
template view
session state
lazy loading
application controlled
router
identity map
aggregate ( nosql DB use this frequently)
data mapper
transaction script
domain model
row data gateway
data transfer object
remote facade
uniform access

drefas learning model

http://martinfowler.com/eaaCatalog/repository.html
http://www.martinfowler.com/articles/injection.html
http://martinfowler.com/eaaDev/SupervisingPresenter.html
http://martinfowler.com/eaaDev/PassiveScreen.html
http://martinfowler.com/eaaDev/PresentationModel.html
http://martinfowler.com/eaaCatalog/modelViewController.html
http://martinfowler.com/eaaDev/uiArchs.html
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
http://martinfowler.com/eaaCatalog/transactionScript.html
http://martinfowler.com/eaaCatalog/serviceLayer.html

http://c2.com/cgi/wiki?ScrumProcess
http://c2.com/cgi/wiki?ExtremeProgramming

http://en.wikipedia.org/wiki/User_story
http://en.wikipedia.org/wiki/Aspect_oriented

http://en.wikipedia.org/wiki/Pair_programming
http://en.wikipedia.org/wiki/Test-driven_development
http://en.wikipedia.org/wiki/Behavior_driven_development
http://en.wikipedia.org/wiki/Exploratory_testing

http://stackoverflow.com/questions/933723/what-is-component-driven-development/

http://en.wikipedia.org/wiki/Extreme_programming

http://agilemanifesto.org/

tech documentation

http://en.wikipedia.org/wiki/Category:Software_design
http://en.wikipedia.org/wiki/KISS_principle
http://en.wikipedia.org/wiki/ACID
http://en.wikipedia.org/wiki/Solid_(object-oriented_design)

http://en.wikipedia.org/wiki/Semaphore_(programming)
http://en.wikipedia.org/wiki/Heap_(data_structure)

crc31
md5
sha1
sha256
bcrypt
http://en.wikipedia.org/wiki/HTTP_cookie
https://developers.google.com/appengine/docs/python/tools/webapp/requestclass
http://docs.python.org/library/hashlib.html
http://en.wikipedia.org/wiki/Cryptographic_hash_function
http://en.wikipedia.org/wiki/HMAC
http://docs.python.org/library/hmac.html
http://en.wikipedia.org/wiki/Salt_(cryptography)
http://docs.python.org/library/stdtypes.html
http://packages.python.org/passlib/
http://ru.wikipedia.org/wiki/HTTP_cookie
http://en.wikipedia.org/wiki/Cryptographic_nonce
http://ru.wikipedia.org/wiki/HMAC
http://en.wikipedia.org/wiki/SQL_injection
http://ru.wikipedia.org/wiki/Base64
http://en.wikipedia.org/wiki/Flex_lexical_analyser
http://en.wikipedia.org/wiki/Context-free_grammar http://ru.wikipedia.org/wiki/Контекстно-свободная_грамматика
http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form
http://en.wikipedia.org/wiki/Standard_Generalized_Markup_Language
http://en.wikipedia.org/wiki/Mixin
http://en.wikipedia.org/wiki/Polymorphic_typing
http://en.wikipedia.org/wiki/BNF_grammar
http://en.wikipedia.org/wiki/Aspect-oriented_programming
http://en.wikipedia.org/wiki/Programming_paradigm
http://en.wikipedia.org/wiki/Duck_typing
http://en.wikipedia.org/wiki/GOMS
http://en.wikipedia.org/wiki/Cognitive_walkthrough verbal protocol, usability assessment, activity analysis
http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
http://en.wikipedia.org/wiki/Data_transfer_object
http://en.wikipedia.org/wiki/Domain_model
http://en.wikipedia.org/wiki/Init
http://en.wikipedia.org/wiki/Runlevel
http://en.wikipedia.org/wiki/White-box_testing

garbage collector

unit test()
moking
ioc
testing

software engeneer(crafstman)

analysis of algorithm
complexity theory
programming language theory

management techniques
how work in team
user psychology
team psychology

http://en.wikipedia.org/wiki/Kanban
http://en.wikipedia.org/wiki/Kanban_(development)
http://en.wikipedia.org/wiki/Scrum_(software_development)

http://www.artima.com/intv/dry.html
http://www.faqs.org/docs/artu/ch04s02.html

http://en.wikipedia.org/wiki/You_aren't_gonna_need_it
http://c2.com/cgi/wiki?YouArentGonnaNeedIt

http://c2.com/xp/OnceAndOnlyOnce.html
http://c2.com/cgi/wiki?CommandPattern

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
http://butunclebob.com/ArticleS.UncleBob.SrpInRuby

http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design
http://en.wikipedia.org/wiki/Big_Design_Up_Front

http://en.wikipedia.org/wiki/Mixin

http://martinfowler.com/articles/mocksArentStubs.html
http://martinfowler.com/bliki/UniformAccessPrinciple.html
http://martinfowler.com/eaaCatalog/remoteFacade.html
http://martinfowler.com/eaaCatalog/serviceLayer.html
http://en.wikipedia.org/wiki/Identity_map
http://en.wikipedia.org/wiki/Data_mapper_pattern
http://en.wikipedia.org/wiki/Active_record_pattern

http://en.wikipedia.org/wiki/Non-virtual_interface_pattern

http://en.wikipedia.org/wiki/Software_development_process
http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%81%D0%BA%D0%B0%D0%B4%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C
http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C

http://en.wikipedia.org/wiki/Law_of_Demeter

http://en.wikipedia.org/wiki/Dynamic_dispatch
http://en.wikipedia.org/wiki/Double_dispatch

http://en.wikipedia.org/wiki/Extreme_Programming
http://en.wikipedia.org/wiki/Code_coverage

SOLID

http://en.wikipedia.org/wiki/Dependency_inversion_principle

#SRP
high cohesion высокая сплоченность
low coupling низкая связь

#OCP
open to extension / close to modification
rely on abstractions
«fool me once, shame on you; fool me twice, shame on me»

#LSP
«Subtypes must be substitutable for their base types»
Substitutability: Child classes not :
remove base class behaviour
violate base class invariants
constraints defined on the base class

Square IS-SUBSTITUTABLE-FOR Shape

http://en.wikipedia.org/wiki/Is-a

#Tell don’t ask

#ISP
«Clients should not be forced to depend on methods they do not use»
small, cohesive, focused, lean interfaces instead of bload base class
refactor large interface so they inherit smaller interfaces

#DIP
High-level modules should not depend on low-level modules.
Both should depend on abstractions

Abstractions should not depend on details. Details should depend on abstractions.

  • Extract Dependencies into Interfaces
  • inject implementation of interfaces into class
  • reduce class responsibilities



#Dependency injection
Allow calling code to inject the dependencies a class needs when it is instatiated

Constructor Injection

preferable

Property(setter) Injection

Parameter Injection

if only one method has the dependency

#Inversion of Control(IoC) Containers
Responsible for object graph instatiation
Initiated at application startup via code or configuration
Managed interfaces and the implementation to be used are Registered with the container
Dependencies on interfaces are Resolved at application startup or runtime

#Polymorphism

#Inheritance

#Strategy pattern

#Repository pattern

#Inversion of control (The Hollywood Principle)
«Don’t call us; we’ll call you»

#Template Method Pattern
#Command Pattern

#Flags over objects anti-pattern

#Application architecture

Traditional Layered Architecture

  • User interface
  • Business Logic Layer
  • Data Access Layer + Common
  • Database + Services

UI depends on BLL depends on DAL depends on Database

##Inverted Architecture

  • Data + Access + UI + Tests + I/O + WCF + WebServices
  • Single Assembly
    ** Business Logic(services)
    ** Object Model (Core, Domain Objects)

Depend on abstraction
Package interfaces with the client
Core / BLL is at center with fewest dependencies

#Don’t Repeat Yourself
magic strings
duplicate logic
repeated if logic
conditionals instead of polymorphism

#Structural http://en.wikipedia.org/wiki/Structural_pattern
##Adapter Pattern http://en.wikipedia.org/wiki/Adapter_pattern
##Facade pattern http://en.wikipedia.org/wiki/Facade_pattern
##Decorator pattern http://en.wikipedia.org/wiki/Decorator_pattern
##Flyweight pattern http://en.wikipedia.org/wiki/Flyweight_pattern

#Principle of Least Knowledge http://en.wikipedia.org/wiki/Law_of_Demeter

#Behavioral http://en.wikipedia.org/wiki/Behavioral_pattern
##Chain of Resposibility http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern
##Composite
##Tree of Responsibility
##Command Pattern(Action, Transactions) http://en.wikipedia.org/wiki/Command_pattern
##Observer http://en.wikipedia.org/wiki/Observer_pattern

#Principle of Least Knowledge http://en.wikipedia.org/wiki/Law_of_Demeter

#Creational http://en.wikipedia.org/wiki/Creational_pattern
singleton
builder
object pool
prototype
multitone http://en.wikipedia.org/wiki/Multiton

#Concurrency http://en.wikipedia.org/wiki/Concurrency_pattern

http://en.wikipedia.org/wiki/Publish–subscribe_pattern
Has-a http://en.wikipedia.org/wiki/Has-a

#MVP

#Presentation Model Pattern?

#MVVM

http://en.wikipedia.org/wiki/Double_dispatch
http://en.wikipedia.org/wiki/Multiple_dispatch
http://en.wikipedia.org/wiki/Visitor_pattern
http://en.wikipedia.org/wiki/Observer_pattern

#Service Locator Pattern

##Null Object Pattern http://en.wikipedia.org/wiki/Null_Object_pattern
http://www.cs.oberlin.edu/~jwalker/nullObjPattern/

Has-a http://en.wikipedia.org/wiki/Has-a

http://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)

http://en.wikipedia.org/wiki/Subclass_(computer_science)#Subclasses_and_superclasses
http://en.wikipedia.org/wiki/Best_coding_practices
http://en.wikipedia.org/wiki/Loose_coupling

http://en.wikipedia.org/wiki/Coupling_(computer_science)
http://en.wikipedia.org/wiki/Cohesion_(computer_science)

http://en.wikipedia.org/wiki/Unified_Modeling_Language
http://en.wikipedia.org/wiki/Code_smell

gateway pattern

http://martinfowler.com/eaaCatalog/gateway.html


Back to posts


comments powered by Disqus