Patterns & Constructs as Knowledge-Gap Indicators

A series of short posts that read each design pattern as a completeness check on domain knowledge.

Almost every design pattern/principle can be used as a completeness-check on domain knowledge.

When you’re reaching for a pattern, ask “does the domain knowledge mandate the coupling this pattern would add or remove?” If you can’t answer, you’ve found a knowledge gap. If you can, the knowledge prescribes the structure directly — the pattern adds nothing the domain hadn’t already decided.

Each family of patterns sharpens that question in its own way. Where a family frames it differently, its framing opens above that family’s posts.

Pick a post on the left. It opens on the right.

References

[1]
E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design patterns: Elements of reusable object-oriented software. Reading, MA: Addison-Wesley, 1994.
[2]
G. Hohpe and B. Woolf, Enterprise integration patterns: Designing, building, and deploying messaging solutions. Boston, MA: Addison-Wesley, 2003.
[3]
B. Yorgey, “The typeclassopedia,” The Monad.Reader, vol. 13, 2009.
[4]
J. Hughes, “Why functional programming matters,” The Computer Journal, vol. 32, no. 2, pp. 98–107, 1989.
[5]
M. Lipovača, Learn you a haskell for great good! No Starch Press, 2011.
[6]
D. Michie, “‘Memo’ functions and machine learning,” Nature, vol. 218, pp. 19–22, 1968.
[7]
E. Meijer, M. Fokkinga, and R. Paterson, “Functional programming with bananas, lenses, envelopes and barbed wire,” in Functional programming languages and computer architecture (FPCA), 1991, pp. 124–144.
[8]
J. C. Reynolds, “Definitional interpreters for higher-order programming languages,” in Proceedings of the ACM annual conference, 1972, pp. 717–740.
[9]
C. Hewitt, P. Bishop, and R. Steiger, “A universal modular ACTOR formalism for artificial intelligence,” in Proceedings of the 3rd international joint conference on artificial intelligence (IJCAI), 1973, pp. 235–245.
[10]
E. W. Dijkstra, “Cooperating sequential processes,” in Programming languages: NATO advanced study institute, Academic Press, 1968.
[11]
P. J. Courtois, F. Heymans, and D. L. Parnas, “Concurrent control with ‘readers’ and ‘writers’,” Communications of the ACM, vol. 14, no. 10, pp. 667–668, 1971.
[12]
B. Goetz, T. Peierls, J. Bloch, J. Bowbeer, D. Holmes, and D. Lea, Java concurrency in practice. Addison-Wesley, 2006.
[13]
H. Garcia-Molina and K. Salem, “Sagas,” in Proceedings of the 1987 ACM SIGMOD international conference on management of data, 1987, pp. 249–259.
[14]
M. T. Nygard, Release it! Design and deploy production-ready software. Pragmatic Bookshelf, 2007.
[15]
E. Evans, Domain-driven design: Tackling complexity in the heart of software. Addison-Wesley, 2003.
[16]
M. Fowler, “DomainEvent.” martinfowler.com, 2005.
[17]
M. Fowler, “AnemicDomainModel.” martinfowler.com, 2005.
[18]
M. Fowler, Analysis patterns: Reusable object models. Menlo Park, CA: Addison-Wesley, 1997.
[19]
W. M. P. van der Aalst, A. H. M. ter Hofstede, B. Kiepuszewski, and A. P. Barros, “Workflow patterns,” Distributed and Parallel Databases, vol. 14, no. 1, pp. 5–51, 2003.
[20]
Object Management Group, “Business process model and notation (BPMN), version 2.0.” https://www.omg.org/spec/BPMN/2.0/, 2011.
[21]
Object Management Group, “Case management model and notation (CMMN), version 1.1.” https://www.omg.org/spec/CMMN/1.1/, 2016.
[22]
W. M. P. van der Aalst, Process mining: Data science in action, 2nd ed. Springer, 2016.
[23]
C. Peltz, “Web services orchestration and choreography,” IEEE Computer, vol. 36, no. 10, pp. 46–52, 2003.
[24]
D. Harel, “Statecharts: A visual formalism for complex systems,” Science of Computer Programming, vol. 8, no. 3, pp. 231–274, 1987.
[25]
A.-W. Scheer, ARIS—business process modeling, 3rd ed. Springer, 2000.
[26]
M. Dumas, M. La Rosa, J. Mendling, and H. A. Reijers, Fundamentals of business process management, 2nd ed. Springer, 2018.
[27]
D. L. Parnas, “On the criteria to be used in decomposing systems into modules,” Communications of the ACM, vol. 15, no. 12, pp. 1053–1058, 1972.
[28]
B. H. Liskov and J. M. Wing, “A behavioral notion of subtyping,” ACM Transactions on Programming Languages and Systems, vol. 16, no. 6, pp. 1811–1841, 1994.
[29]
A. Hunt and D. Thomas, The pragmatic programmer: From journeyman to master. Addison-Wesley, 1999.
[30]
K. J. Lieberherr and I. M. Holland, “Assuring good style for object-oriented programs,” IEEE Software, vol. 6, no. 5, pp. 38–48, 1989.
[31]
M. Fowler, “Yagni.” https://martinfowler.com/bliki/Yagni.html, 2015.
[32]
M. Fowler, “Inversion of control containers and the dependency injection pattern.” https://martinfowler.com/articles/injection.html, 2004.
[33]
M. Seemann and S. van Deursen, Dependency injection principles, practices, and patterns. Shelter Island, NY: Manning, 2019.