Skip to content

Unity Software Engineering Guide (Design Patterns, Software Architecture, Algorithms and Data Structure)

License

Notifications You must be signed in to change notification settings

MfaXyz/Unity-Advanced-Engineering-Guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unity-Software-Engineering-Guide

Software Engineering:

Related repositories

High-level software development topics like domain driven design, design patterns, and antipatterns.

Books:

Level up your programming with game programming patterns By Unity

SOLID Principles:

Single Responsiblity Principle:

A Module should be responsible for one thing and has one reason to change.

Open Closed Principle:

A module should be open for extention but closed for modification. We can solve this problem by using interfaces.

Liskov Substitution Principle:

An Object(Such as class) may be replaced by a sub-object(such as a class that extends the first class) without breaking the program. Derived classes should extend without replacing the functionality of old classes.

Interface Segregation Principle:

Classes should not be forced to depend on methods they do not use.

Dependency Inversion Principle:

High level parts of the system should not depend on low level parts of the system directly, instead they should depend on some kind of abstraction(interfaces)

Note:

So what is Dependency Injection? DI is a subtype of IoC (We will talk about it later) and is implemented by constructor injection, setter injection, or method injection. It’s a more specific implementation that focuses on the way objects obtain their dependencies. DI talks about how one object acquires dependency on another object through abstraction. DIP is a principle of the SOLID principles in Object-Oriented Programming. It’s about decoupling dependencies between high-level and low-level layers through shared abstractions. Dependency Injection is a form of Inversion of Control, but it doesn’t necessarily achieve much decoupling. Dependency Inversion is what achieves the decoupling, and is facilitated by using Dependency Injection with an Inversion of Control Container.

Articles:

SOLID C# Series' Articles

Youtube:

SOLID Unity3D by Jason Weimann

Unite Austin 2017 - S.O.L.I.D. by Unity

Practical Game Development by Infallible Code

S.O.L.I.D Design Patterns by Dapper Dino

Design Patterns:

Design pattern list:

Creational Design Patterns: 1-Deal with creation(construction) of objects 2-Explicit (constructor) VS Implicit (DI, Reflection, etc) | Example: Builder, Factory Method and Abstract Factory), Prototype and Singleton

Structrural Design Patterns: 1- Concerned with structure (e.g, Class Members) 2- Many patterns are wrappers that mimic the underlying class interface. 3- Stress the importance of good API design | Example: Adapter, Bridge, Composite, Decorator, Façade, Flyweight and Proxy

Behavioral Design Patterns: 1- They are all different: No central theme | Example: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Null Object, Observer, State, Strategy, Template Method, Visitor, Blackboard

Game Related Design Patterns: Pattern that we usually use in game programming | Example: Object Pooling and Pub/Sub

Related Udemy Course: https://www.udemy.com/course/design-patterns-csharp-dotnet/

C# Design patterns by dofactory: https://www.dofactory.com/net/design-patterns

Youtube:

Game Programming Patterns by Infallible Code

Game Programming Patterns Tutorials by Unity

Game Programming Patterns by Jason Weimann

18 Key Design Patterns Every Developer Should Know:

18-oo-patterns

Architectural Patterns:

Architectural pattern list: service locator, layered, hexagonal, MVC, MVVM

Concurrency:

Multithreading:

Parallel Programming:

Related Udemy Course: Learn Parallel Programming with C# and .NET

Asynchronous Programming (vs Synchronous):

Clean Code:

C# Coding Standards

Youtube:

Clean Code - Uncle Bob - all lessons

Test Driven Development:

Youtube:

Test-Driven Development (TDD) in Unity by Infallible Code

Inversion of Control (IoC)

It’s a programming principle that inverts the flow of control in an application. Instead of the programmer controlling the flow of a program, the external sources (framework, services, other components) take control of it. In the context of service containers, IoC is achieved by allowing the framework to do the binding and instantiation of dependencies.

Zenject by Infallible Code

Miscs:

C# Features

Youtube:

Live Tutorials & Coding Sessions by Infallible Code

Productivity Assets for Unity by Infallible Code

Programming For Production iHeartGameDev