Teknologi Umum v2.0
Ramad

kira2 di group ini ada yang kontra dengan TDD ga ya? penasaran sama sudut pandangnya

AI, what is TDD?

saya ngga pernah TDD sih

Deleted Account
Ramad

AI, what is Test first programming?

Ronny Gunawan ️

biasanya domain & interfaces first, lalu minimal implementation (with bunch of TODO markers), lalu bikin tests, barulah full implementation

Deleted Account

what is the alternative?

Reinaldy
Ramad

ini, imho, masih TDD

TDD bukannya bener bener bikin test nya dulu baru ngoding?

Ramad
Reinaldy

TDD bukannya bener bener bikin test nya dulu baru ngoding?

banyak aliran sih, kyk agile banyak aliran, tp pada convergent di Red-Green-Refactor

Ronny Gunawan ️

interface IFoo {
}
Mock
gitu biasanya TDD di C#

Ramad

kalo bikin domain, interface, minimal implementation, bunch of ToDo, trus coding test, most likely bakal red

Ronny Gunawan ️

saya sih convention driven

ngoding terus. ngga ditest ngga didebug

your strict typing guides & validates your own code

begitu banyak application parts disambung2in, they validate each other

so beautiful OOP itu

Ramad
Ronny Gunawan ️

ngoding terus. ngga ditest ngga didebug

eh ga ditest gimana maksudnya mas? ga di run kali ya? tp unit test dijalanin?

kalo pake CA di C#, bisa ngoding berhari2 tanpa didebug tanpa ditest

Ronny Gunawan ️

clean architecture

dengan convention yang very very strict & domain driven

Kiro Honjou

om seriously ini indonesia mau nerapin whitelist? 😢ane baru baca2 efek2nya ngeri juga web porto jadi gak bisa diakses atau hal2 lainnya kek mau nyari freelance di platform luar kayak upwork

Ramad
Ronny Gunawan ️

clean architecture

overloaded istilah CA tuh, haha, perlu saya clarify, CA kearah hexagonal / onion, ato CA kearah SOLID?

Ronny Gunawan ️

hexagonal & onion (DDD), sekaligus SOLID, sekaligus OOP, dan install macam2 code analyzer yang galak sekali

saking strictnya, there's only one way to do everything

jangan lupa treat warnings as errors

wkwkwk

Kiro Honjou

Bahas arsitektur yah ane mau nanya sekalian ideal gak sih kalau properti Dto sama repository itu jumlahnya sama jadi kek cuman copy object aja cuman gak sama methodnya

Ronny Gunawan ️

properti yang kamu maksud itu apa?

class yang isinya data?

Ronny Gunawan ️

ok itu namanya model

tiap aggregate (class yang jadi root di setiap model) biasanya mappingnya 1 to 1 ke repository

Kiro Honjou
Ronny Gunawan ️

ok itu namanya model

nah ini ane masih rada rancu soal model antara domain model sama model kek di mvc

Ronny Gunawan ️

domain model: buat business logic
view model: buat dioper ke view
DTO: buat urusan komunikasi
data model: buat urusan penyimpanan

model bagusnya dipisah2 sesuai concernnya

misal DTO concernnya mikirin gimana model itu diserialize jadi JSON atau protobuf atau messagepack

Kiro Honjou
Ronny Gunawan ️

model bagusnya dipisah2 sesuai concernnya

Oh iyah om pernah bilang ke ane gak masalah yah kita bikin class objek banyak yang berulang.
ane inget

Ronny Gunawan ️

data model concernnya mikirin gimana model itu disimpan di SQL atau database lain

Ronny Gunawan ️

kadang orang suka nyampur2

public class Foo {
  [JsonPropertyName("email")]
  [Required, EmailAddress]
  [Key, StringLength(50)]
  public string Email { get; set; }
}

ada urusan json, ada urusan view model, ada urusan database di 1 class

ini ngga boleh

Ramad

property di DTO, kalo represent suatu domain model yang sama, biasanya lebih sedikit propertinya dibanding data model

Kiro Honjou
Ronny Gunawan ️

ini ngga boleh

https://t.me/CSharpIndonesia/4111
Nah ane nemu ini dulu inget yang om pernah bilang i see isee

Ramad

misalnya di data model ada CreatedAt, CreatedBy, UpdatedAt, UpdatedBy, DeletedAt, DeletedBy, ini jarang dibutuhin di DTO

Kiro Honjou
Ramad

property di DTO, kalo represent suatu domain model yang sama, biasanya lebih sedikit propertinya dibanding data model

Eh iyah aku liat malah dto lebih kurus di sourcenya codeopinion om nah ini yang mau ane tanyain juga yang ideal itu sama jumlahnya atau dto yang lebih sedikit atau sebaliknya gitu 😂

Ramad

iya kok, DTO emang seringnya lebih kurus

Kiro Honjou

Gak sia2 nongol di grup dapet daging malem2

Ramad

network kan lambat dan mahal ya, makin langsing / dikit data yang di transfer, generally better

Ronny Gunawan ️

lebih kurus lah. jangan sampe user login dikirimin email, nama, alamat, nomer hp, hashed password, salt, dan semua setting

Deleted Account

tapi om

Kiro Honjou
Ronny Gunawan ️

domain model: buat business logic
view model: buat dioper ke view
DTO: buat urusan komunikasi
data model: buat urusan penyimpanan

Tinggal ane research terkait struktur domain model sama data model.
bisa gak sih kita bilang data model itu masuknya ke entities?

Ramad
Kiro Honjou

Tinggal ane research terkait struktur domain model sama data model.
bisa gak sih kita bilang data model itu masuknya ke entities?

domain model harusnya yang paling deket sama spek / business / real world, dan ga dicampur sama implementation detail

kalo dah ada domain model, mikirin gmn caranya model itu disimpen, jadilah data model

Deleted Account

kek gini naganya sekarang

Kiro Honjou
Ramad

domain model harusnya yang paling deket sama spek / business / real world, dan ga dicampur sama implementation detail

Hmm gitu yah ane masih belum masuk bagian ini nih ane nangkepnya domain model itu berkaitannya nnti ke repository sedangkan data model itu nnti larinya ke entities.
#cmiiw

Deleted Account

jadi telegram itu rada2 hack di feature itu ya

if (fileExtension == "webp"){
showAsSticker(picture);
}

Ronny Gunawan ️

yes. ngeselin karena gambar dari google image rata2 webp

Ronny Gunawan ️
Kiro Honjou

Hmm gitu yah ane masih belum masuk bagian ini nih ane nangkepnya domain model itu berkaitannya nnti ke repository sedangkan data model itu nnti larinya ke entities.
#cmiiw

repository itu baca data model, direturn sebagai domain model, atau sebaliknya. domain model disave jadi bentuk data model

Ramad
Ronny Gunawan ️

repository itu baca data model, direturn sebagai domain model, atau sebaliknya. domain model disave jadi bentuk data model

aga rancu saya baca ini, tp mungkin buat klarifikasi, data model boleh keluar dari repository ga mas?

Ronny Gunawan ️

ngga boleh

core — repository — db

  • domain model cuma boleh dipake di core
  • data model cuma boleh dipake di db
  • repository boleh pakai keduanya

repository jadi jembatan. jadi detail implementasi gimana cara read & write

Kiro Honjou
Ronny Gunawan ️

repository itu baca data model, direturn sebagai domain model, atau sebaliknya. domain model disave jadi bentuk data model

Nah iyah gini maksud aku om jadi yang handle si domain model ini si repositorynya ane ngutip dari sini om.

The repository is implemented in the domain layer, because it works with domain objects. But in the domain layer we should have no idea about any database nor any storage, so the repository is just an interface.
https://svatasimara.medium.com/domain-driven-design-part-5-repository-d5ad32b2e06f

Ronny Gunawan ️

kalau mau dipecah lebih jauh:

  • domain model
  • repository interface
  • repository implementation
  • data model
Kiro Honjou
Ronny Gunawan ️

ngga boleh

Nah iyah berarti bener yah om kalau data model itu berkaitan sama entities.

Ronny Gunawan ️

di repository interface cuma boleh ada domain model
di repository implementation boleh ada both domain model dan data model

untuk memastikan mana yang boleh mana yang ngga boleh, paling enak pake project system

Kiro Honjou

Kalau ane ambil kesimpulan singkatnya gini.
Repository : itu tentang bagaimana data disimpan.
Entities itu : tentang bagaimana proses menyimpan data kek transactional dsbnya.
#cmiiw

Ramad

mungkin kurangin istilah entities itu om, bikin bingung

Data model dan domain model lebih gampang dipahamin

Ronny Gunawan ️

entity itu buat magic

wkwkwk

Kiro Honjou
Ramad

mungkin kurangin istilah entities itu om, bikin bingung

Ane bingung nyebutin istilah persistence proses om yang berkaitan sama db

Soalnga kalau mengacu ke client architecture bagian ini disebutnya entities

Ramad

data model = entities, gitu ga si?

Ronny Gunawan ️
Ramad

data model = entities, gitu ga si?

karena saya ngga paham entities, saya selama ini asumsinya begitu

Ramad

AI, what is entities in context of data persistence?

canggih

Ronny Gunawan ️

so... magic

Ronny Gunawan ️

itu pattern yang saya hindari (entities). kecuali kalau berurusan dengan orleans

Deleted Account

AI, give me the synonyms of entity

Kiro Honjou

Ane mengacunya disini om

Ramad
Kiro Honjou

Ane mengacunya disini om

kalo yang kuning itu domain model

Ronny Gunawan ️

lol

tiap orang istilahnya beda2

Kiro Honjou

Entity: In clean architecture, entity means the business logic. Different from the entity in domain-driven design, the entity here can be realized as the domain in domain-driven design.

Ah iyah akwkw

Deleted Account

mulai sekarang gw bakal pakai* Creature*

Ronny Gunawan ️
Kiro Honjou

Tapi beberapa ngebedain karena definisi ini sih om berkaitan sama data persistence

Qepo

AI, what is the structure of clean architecture

Ronny Gunawan ️

pengen rasanya ngasih contoh. tapi projectnya ngga ada

Ramad

its not that simple

no, clean architecture does not guarantee modularity and flexibility

Deleted Account

this is my kind of architecture

Ronny Gunawan ️

ada 1 pojokan ilmu CA yang namanya decorator pattern

Ramad
Ronny Gunawan ️

it does

CA bisa di implement tanpa DDD mas

Deleted Account
Ronny Gunawan ️

ada 1 pojokan ilmu CA yang namanya decorator pattern

yang contohnya selalu toping pizza, wkwkwk

Ronny Gunawan ️

itu enak banget buat modularity

Qepo

Ini yg diomongin banyakan buat implement di OOP?

Ronny Gunawan ️

yes

Kiro Honjou
Kiro Honjou

Jadi data model itu yah nnti berkaitan langsung sama entities

untuk saat ini asumsi ane begitu sma kek om @RonnyGunawan tapi siapa tau ada yang bisa ngasih pencerahan lain 😂

Deleted Account
Qepo

Ini yg diomongin banyakan buat implement di OOP?

buat tidur lebih nyenyak.
oh.. pilihan gw ada yang setuju

Qepo

Ane belum nyentuh OOP lgi, agak bingung nyimak dritdi🤣
Tp daging juga wkwk

Ronny Gunawan ️
Kiro Honjou

untuk saat ini asumsi ane begitu sma kek om @RonnyGunawan tapi siapa tau ada yang bisa ngasih pencerahan lain 😂

ya saya taunya entity framework buat database, ya sudah entity = data model WKWKWKWK

padahal aslinya EF itu harus dijinakkan pakai repository pattern

Ronny Gunawan ️

biar beneran cuma dipake untuk db

bukan keperluan lain

Kiro Honjou
Ronny Gunawan ️

ya saya taunya entity framework buat database, ya sudah entity = data model WKWKWKWK

akwkw iyah ane baru bener2 paham sedikit soal clean architecture ini semenjak nyemplung di dotnet

Ronny Gunawan ️

typescript juga enak dipake buat CA

Jason Wihardja

Hmm gw punya pengalaman lumayan unik sih. Tapi ya ini kalo bisa gw ambil lesson learned nya juga sebetulnya bukan salah di 100% code coverage nya

Jadi code coverage tinggi, near 100%. Yang terjadi adalah bukannya pusing sih, tapi feels rigid

Jason Wihardja

Okelah, not all of us code the test correctly

Tapi at some point it become increasingly difficult to change thing

Tanpa rewrite a huge chunk of the test

Ramad
Jason Wihardja

Tapi at some point it become increasingly difficult to change thing

red-green-refactor ga codebase itu awalnya dibuatnya? ato unknown?

Jason Wihardja

Jadi actually kalo mau beneran kejar setinggi itu, ya better make sure semua punya expertise dan knowledge yang strong sih

Ramad

red-green-refactor ga codebase itu awalnya dibuatnya? ato unknown?

Pretty much project itu pas dikerjain campuran TDD sama code test along the way

Ramad
Ronny Gunawan ️

typescript juga enak dipake buat CA

typescript somehow rasanya kayak C# dan F# digabung, lebih enak buat FP daripada C#, cmiiw

Jason Wihardja

But then again, 1 orang make a mistake gitu ya, entah methodnya jelek terus dipaksain unit test, atau test nya simply jelek

Itu amplified

Kiro Honjou

Dulu waktu di django, go sama php cuman sekedar nerapin dikit design patern tapi belum bener2 terstruktur asalkan busnis logic bisa di test ywdh.
tapi pas ngulik c# wah ini bahasa bener2 pure objek oriented banget apa2 harus lewat object gak bisa instan kek bahasa sebelah😂akhirnya ketagihan

Jason Wihardja

Jadinya itu somewhat ngecause other trouble

Ronny Gunawan ️

saya pernah lho. udah yakin banget codenya ngga ada bug, semua case yang rawan udah masuk coverage, sisa test case saya list sebagai TODO. eh besok2nya ada bug, pas dicek ternyata bugnya di bagian yang belum ditulis unit testnya

Jason Wihardja

Yang mana si rigidness tadi yang paling berasa efeknya

Jason Wihardja

Jadi ada lah ya yang misal bikin test nya too tightly coupled sama implementation

Misal 1 orang bikin kayak gitu. Nah orang yang build on that unit jadi kena dampak semua

Lama2 merembet sampe it's impossible to change a little bit without rewrite a huge chunk of code and tests

Nah tapi when being done correctly, wah cantik banget

Kiro Honjou

Semakin malem semakin mantep bahasannya 😂ane ngetest selama ini cuman ngandelin assertion bawaan aja

Jason Wihardja

Di kantor yg sama, another project yang orangnya lebih dikit dan jadinya gampang koordinasi dan naikin standard nya

Jason Wihardja

Itu ada code yang cuma di code 1x, sampe gw cabut dari kantor itu mungkin kalo diitung jumlah changes nya ga sampe 10x

For the lifetime of the project selama gw disitu

Jadi add functionality, dll semua smooth

Ga ada yang bentrok, ga ada yg feels rigid, dll

Di satu sisi writing test itu masih skill yang ga banyak dev indonesia kuasai

Ramad
Jason Wihardja

Jadi add functionality, dll semua smooth

the very definition of software, its soft thus easy to change

Jason Wihardja

Secara bener ya, bukan cuma asal bisa nulis test

Kiro Honjou
Jason Wihardja

Di satu sisi writing test itu masih skill yang ga banyak dev indonesia kuasai

Karena yah banyak magicnya soal ini om kek ngandelin assertion aja beres 😂ane baru tau pentingnya test yang baik aja dari obrolan ini

Ramad
Jason Wihardja

Secara bener ya, bukan cuma asal bisa nulis test

ya ini spektrum lah, cuma belief saya saat ini, any kind of test its better than no test at all

Jason Wihardja

Jadi kalo berani mau test ngejar 100%, better make sure the code is at high standard

Kalo yang code testnya masih mengandung "anti-patterns" ya it will make things difficult down the road

Jadinya again, ga pusing. Tapi rigid

Ramad
Jason Wihardja

Jadi kalo berani mau test ngejar 100%, better make sure the code is at high standard

belom ngerti sih justifikasinya harus ngejar 100%. kalo tinggi, paham, tp 100%? belom dapet why-nya

Jason Wihardja

Pusingnya itu datang dari rigidnya. Kayak anjay where do I even start

Jason Wihardja

Semua kalo gw colek codenya, yang lain ikut broken

Ramad
Jason Wihardja

Leave no path untested I guess?

at the expense of false sense of confidence

Jason Wihardja
Ramad

at the expense of false sense of confidence

Yes, but again one could argue bahwa kalo code nya is so good, then all codes adalah meaningful code, bukan "noise" jadinya 100% of the code actually do something significant jadinya testnya harus di 100%

Kiro Honjou

btw sebenarnya testing itu tugas QA atau developer sih? Om

Jason Wihardja

But again, it takes some level of expertise buat bisa nulis code sebagus itu dan nulis test yang sama bagusnya

Jason Wihardja

Karena kalo kepeleset dikit, bakal amplified jeleknya itu ke part code yg lain

Pengalaman gw sih gitu ya

Ramad
Jason Wihardja

But again, it takes some level of expertise buat bisa nulis code sebagus itu dan nulis test yang sama bagusnya

might be a hard question, better to write bad test or, knowing one will write a bad one, not writing test at all?

Jason Wihardja
Ramad

might be a hard question, better to write bad test or, knowing one will write a bad one, not writing test at all?

Kan ga harus ada di ujung extreme. Kita di tengah, write test, but also ada room buat make mistakes

Ramad
Kiro Honjou

btw sebenarnya testing itu tugas QA atau developer sih? Om

kalo kata Uncle Bob, QA seharusnya found no issue in our code

Jason Wihardja

Bukannya mendukung mistakes so it can be made ya, tapi sediain room karena nobody is perfect

Reinaldy

kalian nanti pagi ga kerja?