• Stars
    star
    1
  • Language ShaderLab
  • Created almost 2 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A toy project to verify DDD can works in Unity3D

Domain-Driven Design in Unity3D (Demo)

這是一個試驗性的專案,用於驗證 Unity3D 中應用 Domain-Driven Design 的概念是可行的。

概念

Domain-Driven Design 採取了分層式架構(Layered Architecture)已經能很好的分離「商業邏輯」和「介面呈現」的問題,這個專案加入了 Clean Architecture 的概念讓整體更清晰。

  • Domain - 商業邏輯,處理核心的任務
  • UseCase - 使用流程,負責把商業邏輯組合成可以使用的動作(如:攻擊敵人)
  • Repository - 資料處理,用來支援 UseCase 可以讀取、儲存資料(並能根據需求改變來源)
  • Result + UI - 介面呈現,將 UseCase 操作結果封裝成介面所需的資訊反應在畫面上

架構

以下皆為 Assets 目錄下的檔案。

目錄 說明
BattleSystem 戰鬥系統,為了配合 Test Runner 的 Assembly 需求獨立為一個目錄
BattleSystem/Domain 商業邏輯,主要放置戰鬥系統的資料保存、判斷邏輯
BattleSystem/Domain/Service 商業邏輯,因為處理邏輯的部分跟資料無關,因此獨立出來
BattleSystem/UseCase 實際使用的流程,會組合 Domain 下的物件使用(如:攻擊敵人)
BattleSystem/Result UseCase 的結果,需要為純資料(Data Transfer Object)
BattleSystem/Repository 儲存倉庫,用於處理資料的保存
Scene 各場景的管理程序,用於呼叫各項系統運作並分配到 UI 上
UI 介面呈現的邏輯(如:HP 歸零時顯示為紅字)
Tests 測試,只針對每個系統做測試(不依賴 Unity3D)
Game.cs 遊戲主系統,用於簡易的 IoC 容器

這裡為了簡化實作因此沒有用於輸入 UseCase 的物件類型

依賴關係

模組 依賴
BattleSystem.UseCase BattleSystem.Domain, BattleSystem.Domain.Service
BattleSystem.Domain.Service BattleSystem.Domain
BattleSystem.Repository BattleSystem.Domain
Scene BattleSystem.UseCase, BattleSystem.Result

BattleSystem.UseCase 不依賴 BattleSystem.Repository 的原因是因為定義了 IBattleRepository 介面。

領域模型(Domain Model)

Value

物件 說明
Actor 參與戰鬥的角色,因為簡化設計的關係只記錄生命值跟生存狀態

Entity

物件 說明
Battle 一場戰鬥的單位,管理玩家跟敵人的互動

Service

物件 說明
DamageCalculator 用於計算可套用的傷害,目前只有直接傷害
RecoveryCalculator 用於計算可回復的生命,目前只有直接回復

另一種做法是實作 AttackService 直接呼叫 Battle 處理,在流程比較複雜時會沒那麼繁瑣。

More Repositories

1

rails-letsencrypt

The Let's Encrypt certificate manager for rails
Ruby
126
star
2

boxing

The zero-configuration Dockerfile generator for Ruby.
Ruby
61
star
3

mwc

The tool to compile mruby on WebAssembly
Ruby
18
star
4

ruby-gitlab-ci

The GitLab CI templates for Ruby project
12
star
5

go-plurk-robot

登入國軍 Online 為了安撫寂寞的網友(才沒有)所製作的機器人
Go
11
star
6

heroku-buildpacks-php-with-phalcon

Heroku Buikdpack PHP with PhalconPHP and Composer
Shell
11
star
7

mruby-go

The pure go mruby virtual machine implementation.
Go
11
star
8

doll

The Chatbot Framework written in Ruby
Ruby
10
star
9

mruby.wasm

mruby WebAssembly using WebIDL
HTML
9
star
10

openbox

The zero-configuration Ruby container entry-point.
Ruby
9
star
11

terraform-provider-lambdalabs

The Lambdalabs provider for Terraform
Go
8
star
12

liveness

The Rack middleware to provide health check endpoints.
Ruby
8
star
13

replicate-pastel-mix

The pastel-mix model implementation on replicate
Python
8
star
14

laravel-guestbook-example

A simple guestbook create via Laravel Framework
PHP
8
star
15

mcoin

The cryptocurrency market monitor tool
Ruby
7
star
16

FiveFood

五食,每個上班族必備的午餐決策系統。
Ruby
7
star
17

hiro

The game framework based on mruby.
C
6
star
18

middleman-webpacked

Ruby
6
star
19

magica

A tool to build C++ project
Ruby
5
star
20

tide.ex

Communicate with Ruby via Erlport
Elixir
5
star
21

terraform-proxmox-kubernetes

The terraform module for create Kuberentes cluster on ProxmoxVE
HCL
5
star
22

30minGuestBook

PHP
5
star
23

administrate-notus_theme

The Administrate Notus Theme designed by Creative Tim
CSS
5
star
24

mitake

The ruby gem for Mitake SMS
Ruby
4
star
25

blog-ai.aotoki.me

The RAG API for blog.aotoki.me
TypeScript
4
star
26

hanami-lambda

Hanami Lambda is a gem that provides a way to run hanami application on AWS Lambda.
Ruby
4
star
27

gitlab-sonar-scanner

The sonar runner for gitlab-ci
Shell
4
star
28

pagoda-wp-zh_TW

WordPress zh_TW on PagodaBox
PHP
4
star
29

ai-gacha

Generate a mobile game-like card from AI
TypeScript
4
star
30

GlobalGameJam2023

Global Game Jam 2023 @ Taipei, Taiwan
TypeScript
4
star
31

202102-tdd-refactor-budget

The budget query practice of TDD & Refactor class
Ruby
3
star
32

5compiler

The compiler example written in Ruby
Ruby
3
star
33

book-craft-your-mruby-virtual-machine

The sample code of my book - craft-your-mruby-virtual-machine
C
3
star
34

warden-line

The warden strategies for LINE ID Token
Ruby
3
star
35

mask-map

2020 年最流行的口罩地圖
Vue
3
star
36

lita-gitlab-ci

Lita Gitlab handler for send message about build status.
Ruby
3
star
37

packer-rails

Using Packer.io to builds Ruby on Rails image.
Shell
3
star
38

flowhook

Convert flowdock straming into webhook
Ruby
3
star
39

nginx-pagespeed

A docker image include nginx with pagespeed.
Shell
2
star
40

elct9620.github.com

My personal website.
HTML
2
star
41

MRubyShader

Using OpenFrameworks and mruby to build a simple shader playground.
C++
2
star
42

iv-plurk

The Plurk API client
Ruby
2
star
43

newebpay-ruby

The offsite payments implement for Newebpay
Ruby
2
star
44

MCUCourseAPI

A Ming Chuan University Course API service, using phalcon on heroku.
PHP
2
star
45

mcu-course-query-demo

A simple mcu course query demo.
JavaScript
2
star
46

plurk-salary

JavaScript
2
star
47

wvs

The "Walrus vs Slime" rewritten in DDD style
Go
2
star
48

Aotoki-Backbone.js

My Backbone.js Practice
2
star
49

mruby-shader-generator

The Ruby DSL GLSL shader code
Ruby
2
star
50

.cat

The loading cat generator
Ruby
2
star
51

cybersource

The ruby gem for Visa CyberSource API
Ruby
2
star
52

dcha

An blockchain test live in LAN using Multicast
Ruby
1
star
53

hahamut

The Bahamut Forum's chatbot ruby client implement
Ruby
1
star
54

hubot-plurk

HuBot 的 Plurk Adapter
1
star
55

try_git

1
star
56

coscup-2020-cdktf

Demo project for COSCUP 2020 LT
TypeScript
1
star
57

ar-bottle-royale

The Global Game Jam 2021
Ruby
1
star
58

turn-based-game-model-prototype

The turn-based game model prototype for @BasalticStudio NewEra
Ruby
1
star
59

RichBike

The web game prototype built in 5xRuby's Vue x uBike workshop
Ruby
1
star
60

do-kubernetes-challenge-2021

The DigitalOcean Kubernetes Challenge at 2021
Ruby
1
star
61

go-steam

Steam Web API implements in Go
Go
1
star
62

elct9620

My Profile README
1
star
63

open-story

The experimental open world story bot
Ruby
1
star
64

FlashSocketIO

FlashSocketIO implement, via AS3Websocket
ActionScript
1
star
65

gh-category

Firefox OS App Days @ Taiwan Project - Github Category
JavaScript
1
star
66

coscup-chat

A simple socket.io/express chat create at COSCUP 2012.
JavaScript
1
star
67

ac-nh-turnip-prices

Ruby
1
star
68

go-chatter

A practice using golang write a simple chatroom.
CSS
1
star
69

build-game-with-react-prototype

Inspired by https://steina.vercel.app
JavaScript
1
star
70

granblue.api

The API Endpoint for Granblue Fantasy Database
Go
1
star
71

fireplurk

A simple plurk public timeline webapp.
JavaScript
1
star
72

cucumber-playwright-example

Use cucumber and playwright together for E2E testing
TypeScript
1
star
73

elct9620-vim

My personal vimrc version.
Vim Script
1
star
74

phpconf2014-sample

My PHPConf 2014 (Taiwan) talk's sample code.
PHP
1
star
75

elixir-mud

Elixir TCP Server practice
Elixir
1
star
76

MCUCourseCLI

Ming Chuan University Course command line tools for developer.
PHP
1
star
77

pio-mrubyc

Provide mruby/c support for PlatformIO
Python
1
star
78

concourse-example-rails

T 客邦 2017 年鐵人賽 - Concourse 的 Deploy 範例專案
Ruby
1
star
79

reactive-pixi-poc

Domain-Driven Design with React + RxJS + PIXI.js (PoC)
TypeScript
1
star
80

setup-mruby

An action to compile mruby
TypeScript
1
star
81

nix-aura

The nix-based universal development environment
Nix
1
star
82

snake-online

A simple snake game online version
JavaScript
1
star
83

mini-cinema-bot

The LINE bot for query cinema information
Ruby
1
star