# clean-code

Published articles for clean-code.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Libreboot Build System Audit 5

DevFeed: [Libreboot Build System Audit 5](<https://devfeed.tech/articles/libreboot-build-system-audit-5-32665.md>)

Original publisher: [Read original article](<https://libreboot.org/news/audit5.html>)

Author: Leah Rowe

Published: 2026-09-17T04:32:50.666044Z

Content type: article

Language: en

Sources: [News about Libreboot releases and development](<https://devfeed.tech/sources/news-about-libreboot-releases-and-development.md>)

Topics: [audit](<https://devfeed.tech/topics/audit.md>), [opensource](<https://devfeed.tech/topics/opensource.md>), [boot](<https://devfeed.tech/topics/boot.md>), [POSIX](<https://devfeed.tech/topics/posix.md>), [ide](<https://devfeed.tech/topics/ide.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [audit](<https://devfeed.tech/tags/audit.md>), [bios](<https://devfeed.tech/tags/bios.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [canoeboot](<https://devfeed.tech/tags/canoeboot.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [coreboot](<https://devfeed.tech/tags/coreboot.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [firmware](<https://devfeed.tech/tags/firmware.md>), [free-software](<https://devfeed.tech/tags/free-software.md>), [libre](<https://devfeed.tech/tags/libre.md>), [libreboot](<https://devfeed.tech/tags/libreboot.md>), [linux](<https://devfeed.tech/tags/linux.md>), [opensource](<https://devfeed.tech/tags/opensource.md>), [operating-systems](<https://devfeed.tech/tags/operating-systems.md>), [posix](<https://devfeed.tech/tags/posix.md>), [uefi](<https://devfeed.tech/tags/uefi.md>)

### AI overview

This article describes the fifth audit of Libreboot's lbmk build system, covering changes made since the Libreboot 20240504 release. It reports a reduction in shell-script size, bug fixes, feature changes, and improvements aimed at cleaner and more efficient code.

### Source excerpt

Article: Libreboot Build System Audit 5 Web link: https://libreboot.org/news/audit5.html

## Kotlin Explicit Backing Fields: Encapsulation Tradeoffs and Downcasting Risks

DevFeed: [Kotlin Explicit Backing Fields: Encapsulation Tradeoffs and Downcasting Risks](<https://devfeed.tech/articles/the-downcast-trap-in-kotlin-s-explicit-backing-fields-22951.md>)

Original publisher: [Read original article](<https://proandroiddev.com/the-downcast-trap-in-kotlins-explicit-backing-fields-626ef0d66e50?source=rss----c72404660798---4>)

Author: Ehab Elwan

Published: 2026-09-13T05:31:32Z

Content type: opinion

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [article](<https://devfeed.tech/tags/article.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [memory](<https://devfeed.tech/tags/memory.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>)

### AI overview

This article compares Kotlin's traditional private mutable property plus public read-only wrapper with explicit backing fields. It explains that explicit backing fields can avoid an extra wrapper allocation, but because the underlying object remains mutable, an external downcast may bypass the intended read-only restriction and mutate internal state.

### Source excerpt

Why eliminating the double-property boilerplate changes how we protect our architecture Image generated by AIDisclosure: This article was drafted by me and refined with the help of AI tools. If you have written Kotlin in the last few years, you are intimately familiar with the double-property boilerplate. Whether in Android ViewModels or general state holders, maintaining a private mutable property alongside a public read-only property is a chore we have all accepted in the name of strict encapsulation to prevent our internal state from being hijacked by outside classes. It makes the code significantly cleaner (and slightly more memory efficient). However, it fundamentally changes how we protect our state, moving from a physical object boundary to a simple type restriction. Let's look at the tradeoff. The Old Way: Wrapper Protection For years, the standard approach to encapsulating state has looked like this: class OldViewModel { // 1. The private mutable state private val _uiState = MutableStateFlow(UiState()) // 2. The public read-only state val uiState: StateFlow<UiState> = _uiState.asStateFlow() } This is tedious to write, but it provides a strict architectural guarantee. When you call .asStateFlow(), Kotlin does not just change the type; it creates a brand new wrapper object in memory (ReadonlyStateFlow). While this physical barrier is fantastic for safety, it does mean you are incurring a minor memory allocation overhead by creating a secondary wrapper object for every exposed state. The New Way: Upcasting Explicit Backing Fields allow you to merge these two properties into one concise declaration, bypassing that extra memory allocation entirely: class NewViewModel { val uiState: StateFlow<UiState> field = MutableStateFlow(UiState()) } Inside your class, the Kotlin compiler smart-casts the field so you can mutate it internally. Outside the class, the compiler restricts callers to the read-only StateFlow interface. It looks incredibly clean and saves an allocat

## How a Tech Lead Encouraged Testing in Legacy Code

DevFeed: [How a Tech Lead Encouraged Testing in Legacy Code](<https://devfeed.tech/articles/nobody-wanted-to-write-tests-26188.md>)

Original publisher: [Read original article](<https://journal.optivem.com/p/nobody-wanted-to-write-tests>)

Author: Valentina Jemuović

Published: 2026-08-04T06:02:15Z

Content type: opinion

Language: en

Sources: [Optivem Journal](<https://devfeed.tech/sources/optivem-journal.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Template](<https://devfeed.tech/topics/template.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [tech-lead](<https://devfeed.tech/tags/tech-lead.md>), [training](<https://devfeed.tech/tags/training.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

This opinion article recounts how an engineering leader struggled to introduce testing and clean-code practices across multiple companies. As a Tech Lead, the author created a testable Clean Architecture template, recruited developers who valued quality, built an initial module, and trained the team to use the approach.

### Source excerpt

"We don't have time to write the code twice."

## How Big Tech Interview Decisions and Rounds Work

DevFeed: [How Big Tech Interview Decisions and Rounds Work](<https://devfeed.tech/articles/how-big-tech-interviews-actually-work-39676.md>)

Original publisher: [Read original article](<https://www.gauravsarma.com/random/2026-04-21_how-big-tech-interviews-work>)

Published: 2026-04-21T00:00:00Z

Content type: article

Language: en

Sources: [Gaurav Sarma's Blog](<https://devfeed.tech/sources/gaurav-sarma-s-blog.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>)

Tags: [api-integration](<https://devfeed.tech/tags/api-integration.md>), [bug](<https://devfeed.tech/tags/bug.md>), [career](<https://devfeed.tech/tags/career.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [dsa](<https://devfeed.tech/tags/dsa.md>), [faang](<https://devfeed.tech/tags/faang.md>), [interview](<https://devfeed.tech/tags/interview.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [system-design](<https://devfeed.tech/tags/system-design.md>), [tech](<https://devfeed.tech/tags/tech.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>)

### AI overview

The article explains how big tech interviews are evaluated. Interviewers assess specific signals independently across coding, system design, and project-focused rounds, then discuss the combined feedback in a panel. Communication, code quality, edge-case handling, problem-solving instincts, scalability, and trade-off analysis can affect the decision, not just whether a problem is solved.

### Source excerpt

Having worked at a few big tech companies and having interviewed candidates for them as well, here are some things I wish more candidates knew going in. How decisions are actually made Each interviewer is assigned a round and for every round, there are specific signals they need to collect...

## Why AI-generated code can be messy at first and maintainable after refactoring

DevFeed: [Why AI-generated code can be messy at first and maintainable after refactoring](<https://devfeed.tech/articles/my-ai-wrote-garbage-code-and-that-was-exactly-what-i-needed-27207.md>)

Original publisher: [Read original article](<https://antonioleiva.com/my-ai-wrote-garbage-code-and-that-was-exactly-right>)

Published: 2026-03-02T00:00:00Z

Content type: article

Language: en

Sources: [Antonio Leiva](<https://devfeed.tech/sources/antonio-leiva.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [OpenClaw](<https://devfeed.tech/topics/openclaw.md>), [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [cli](<https://devfeed.tech/tags/cli.md>), [code](<https://devfeed.tech/tags/code.md>), [docker](<https://devfeed.tech/tags/docker.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [raspberry-pi](<https://devfeed.tech/tags/raspberry-pi.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>)

### AI overview

The author argues that AI-assisted exploratory projects do not need clean architecture and polished tests from the beginning. Initial code can be messy, but the work is complete only after successive refactoring makes it maintainable and scalable. The article illustrates this with a project whose expanding API, web interface, CLI, and MCP led to technical debt and very large files.

### Source excerpt

Everything Android, Kotlin and other random topics

## 100 Tips to Write Clean Code

DevFeed: [100 Tips to Write Clean Code](<https://devfeed.tech/articles/100-tips-to-write-clean-code-26197.md>)

Original publisher: [Read original article](<https://craftbettersoftware.com/p/100-tips-to-write-clean-code>)

Author: Daniel Moka

Published: 2025-09-17T05:03:43Z

Content type: article

Language: en

Sources: [Craft Better Software](<https://devfeed.tech/sources/craft-better-software.md>)

Topics: [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [code-analysis](<https://devfeed.tech/tags/code-analysis.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [tips](<https://devfeed.tech/tags/tips.md>)

### AI overview

This article presents 100 practical tips for writing clean code that remains readable, testable, and maintainable. The covered guidance includes naming, functions, classes, comments, and commits, with recommendations such as using intention-revealing names, keeping functions concise, limiting class responsibilities, and avoiding side effects.

### Source excerpt

Clean Functions, Classes, Comments, Commits and everything you need to write Clean Code

## Writing Clear, Focused Assertions in Unit Tests

DevFeed: [Writing Clear, Focused Assertions in Unit Tests](<https://devfeed.tech/articles/the-1-mistake-in-unit-testing-and-how-to-fix-it-26213.md>)

Original publisher: [Read original article](<https://craftbettersoftware.com/p/the-1-mistake-in-unit-testing-and>)

Author: Daniel Moka

Published: 2025-05-24T05:01:11Z

Content type: tutorial

Language: en

Sources: [Craft Better Software](<https://devfeed.tech/sources/craft-better-software.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>)

Tags: [best-practices](<https://devfeed.tech/tags/best-practices.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [readability](<https://devfeed.tech/tags/readability.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

The article presents five practices for writing clean, expressive assertions in unit tests. It emphasizes testing one logical behavior per test, capturing domain knowledge through well-named helper functions, and treating tests as documentation.

### Source excerpt

Best practices to nail the most important part of your unit test

## Six Principles for Writing Clean, Maintainable Classes

DevFeed: [Six Principles for Writing Clean, Maintainable Classes](<https://devfeed.tech/articles/write-clean-classes-like-a-pro-26216.md>)

Original publisher: [Read original article](<https://craftbettersoftware.com/p/write-clean-classes-like-a-pro>)

Author: Daniel Moka

Published: 2025-04-19T05:00:55Z

Content type: tutorial

Language: en

Sources: [Craft Better Software](<https://devfeed.tech/sources/craft-better-software.md>)

Topics: [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Code](<https://devfeed.tech/topics/code.md>), [Development](<https://devfeed.tech/topics/development.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Inheritance](<https://devfeed.tech/topics/inheritance.md>)

Tags: [classes](<https://devfeed.tech/tags/classes.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [quality](<https://devfeed.tech/tags/quality.md>), [reuse](<https://devfeed.tech/tags/reuse.md>)

### AI overview

This tutorial presents six principles for writing clean classes: use noun-based names, avoid unnecessary getters and setters, hide internal state, expose a focused API, order methods by call flow, and favor composition over inheritance. It argues that small, focused, intention-revealing classes are easier to change, test, and understand.

### Source excerpt

7 essential tips to produce maintainable and intention-revealing classes

## 6 Testing Mistakes You Should Avoid

DevFeed: [6 Testing Mistakes You Should Avoid](<https://devfeed.tech/articles/6-testing-mistakes-you-should-avoid-26198.md>)

Original publisher: [Read original article](<https://craftbettersoftware.com/p/6-testing-mistakes-you-should-avoid>)

Author: Daniel Moka

Published: 2025-04-05T05:00:42Z

Content type: tutorial

Language: en

Sources: [Craft Better Software](<https://devfeed.tech/sources/craft-better-software.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [mutation-testing](<https://devfeed.tech/topics/mutation-testing.md>), [Development](<https://devfeed.tech/topics/development.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>)

Tags: [apis](<https://devfeed.tech/tags/apis.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code-testing](<https://devfeed.tech/tags/code-testing.md>), [mutation-testing](<https://devfeed.tech/tags/mutation-testing.md>), [shift-left](<https://devfeed.tech/tags/shift-left.md>), [solid-principles](<https://devfeed.tech/tags/solid-principles.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A practical guide to avoiding common testing mistakes, including testing late, relying too heavily on code coverage, testing implementation details, and neglecting clean test code. It recommends shift-left testing, mutation testing, behavior-focused tests through public APIs, and treating tests as maintainable code.

### Source excerpt

Each with a simple fix you can apply today

## Clean Code Discussion

DevFeed: [Clean Code Discussion](<https://devfeed.tech/articles/clean-code-discussion-28424.md>)

Original publisher: [Read original article](<https://craftingtechteams.substack.com/p/clean-code-discussion>)

Author: Denis Čahuk

Published: 2025-03-06T15:10:02Z

Content type: opinion

Language: en

Sources: [Crafting Tech Teams](<https://devfeed.tech/sources/crafting-tech-teams.md>)

Topics: [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Code quality](<https://devfeed.tech/topics/code-quality.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [legacy](<https://devfeed.tech/topics/legacy.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

### AI overview

A recording of a live discussion about Clean Code and Test-Driven Development. The speakers examine testing challenges, test smells, refactoring, tooling, code-quality practices, TDD adoption, team practices, event modeling, and legacy systems.

### Source excerpt

A recording from Denis Čahuk's live video

## Test-driven Development, Clean Code, Teamwork

DevFeed: [Test-driven Development, Clean Code, Teamwork](<https://devfeed.tech/articles/test-driven-development-clean-code-teamwork-28439.md>)

Original publisher: [Read original article](<https://craftingtechteams.substack.com/p/test-driven-development-clean-code>)

Author: Denis Čahuk

Published: 2025-02-12T10:42:59Z

Content type: opinion

Language: en

Sources: [Crafting Tech Teams](<https://devfeed.tech/sources/crafting-tech-teams.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [development](<https://devfeed.tech/tags/development.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [teamwork](<https://devfeed.tech/tags/teamwork.md>)

### AI overview

A recorded live video discusses test-driven development, clean code, and teamwork conflicts, including practical TDD adoption, cultural shifts, incremental quality improvements, prioritization, resistance, and sustainable change.

### Source excerpt

A recording from Denis Čahuk's live video

## Defining Go Types and Loading Blockchain Settings from JSON

DevFeed: [Defining Go Types and Loading Blockchain Settings from JSON](<https://devfeed.tech/articles/ultimate-go-advanced-engineering-episode-10-22199.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2023/01/ultimate-go-advanced-engineering-episode-10.html>)

Published: 2023-01-03T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Blockchain](<https://devfeed.tech/topics/blockchain.md>), [data](<https://devfeed.tech/topics/data.md>), [Ethereum](<https://devfeed.tech/topics/ethereum.md>)

Tags: [bitcoin](<https://devfeed.tech/tags/bitcoin.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [blockchain-asset](<https://devfeed.tech/tags/blockchain-asset.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [data-structure](<https://devfeed.tech/tags/data-structure.md>), [data-type](<https://devfeed.tech/tags/data-type.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [genesis-record](<https://devfeed.tech/tags/genesis-record.md>), [go](<https://devfeed.tech/tags/go.md>), [go-blockchain](<https://devfeed.tech/tags/go-blockchain.md>), [go-types](<https://devfeed.tech/tags/go-types.md>), [json](<https://devfeed.tech/tags/json.md>), [load](<https://devfeed.tech/tags/load.md>), [types](<https://devfeed.tech/tags/types.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This video explains how to define Go types for a blockchain's genesis record and load the blockchain's settings from a JSON file. It also discusses choosing suitable built-in types for struct fields, including limitations of uint64.

### Source excerpt

Introduction In episode 9, Bill introduced the idea of the genesis record and its role in his blockchain. As a recap, the genesis record will be used to customize the settings of his blockchain. The approach Bill takes here is similar to how Ethereum operates because he is storing the record in JSON format. In this video, Bill starts by defining the Go types his blockchain will use. The first type he defines will represent the genesis record. This type will be populated by the data found in the genesis record and will ensure Bill reaps all the benefits of using strongly typed language. Before he proceeds with the next type definition, he highlights the possible limitations he can encounter by using type uint64. Watch to learn how to write idiomatic and durable Go code that will load your blockchain's settings from disk.

## Reclaim the reactivity of your state management, say no to imperative MVI

DevFeed: [Reclaim the reactivity of your state management, say no to imperative MVI](<https://devfeed.tech/articles/reclaim-the-reactivity-of-your-state-management-say-no-to-imperative-mvi-25932.md>)

Original publisher: [Read original article](<https://proandroiddev.com/reclaim-the-reactivity-of-your-state-management-say-no-to-imperative-mvi-3b23ca6b8537?source=rss-7a8d96da8cb6------2>)

Author: Gabor Varadi

Published: 2022-05-02T05:05:46Z

Content type: opinion

Language: en

Sources: [Stories by Gabor Varadi on Medium](<https://devfeed.tech/sources/stories-by-gabor-varadi-on-medium.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [Redux](<https://devfeed.tech/topics/redux.md>), [Elm](<https://devfeed.tech/topics/elm.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [architecture-pattern](<https://devfeed.tech/tags/architecture-pattern.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [elm](<https://devfeed.tech/tags/elm.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [model-view-intent](<https://devfeed.tech/tags/model-view-intent.md>), [mvi](<https://devfeed.tech/tags/mvi.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [redux](<https://devfeed.tech/tags/redux.md>), [state](<https://devfeed.tech/tags/state.md>), [state-management](<https://devfeed.tech/tags/state-management.md>)

### AI overview

The article critiques imperative MVI-style state management as overly complex and boilerplate-heavy. It traces MVI's web-oriented history through Cycle.js, The Elm Architecture, and Redux, and questions whether those patterns fit statically typed application development.

### Source excerpt

Do you find yourself chasing for "clean code, clean architecture, clean design, clean state management" yet still feel bogged down in a sea of boilerplate for even the simplest of tasks -- such as showing a simple list fetched with a coroutine? Surely this could be done in a single line or maybe about seven, but it certainly shouldn't need gigantic case-whens, three layers of indirection, and so on? Well, normally you could just invoke functions on ViewModel and it would work, but if you're forced to seek the "architectural holy grail", no one around you will trust your code unless you add at least one sealed class called ViewActions, and increase the cyclomatic complexity of your "action handler" function until it feels "just clean enough". (After all, surely the more completely unrelated things a single function does based on its argument, the more it has a "single responsibility" of handling literally everything, which is why you know it's definitely the best possible way to do it. 😏) Anyway, the boilerplate of coupling together all aspects into a single class, whether it is a function call or state property, this all has a history: namely, it came from the web. The brief history of MVI MVI stands for "model-view-intent" and comes from a (not very popular for use in production) Javascript framework called Cycle.js, hand-in-hand with a (not popular anymore) concept called "The Elm Architecture" defined as the best practices and intended use of an experimental (and since 2019, unmaintained) "functional-reactive programming language for the web" called ELM. Then again, these didn't come from a vacuum either -- the originator is Redux, in 2015. The general idea was to implement a state machine using the command processor pattern in Javascript, thereby supporting "undo" functionality (also often referred to as "time-travel debugging"). Of course, most design decisions of Redux only make sense for Javascript -- as it is a language with no static typing. It makes sense to

## There's No Such Thing as Clean Code

DevFeed: [There's No Such Thing as Clean Code](<https://devfeed.tech/articles/there-s-no-such-thing-as-clean-code-25812.md>)

Original publisher: [Read original article](<https://www.steveonstuff.com/2022/01/27/no-such-thing-as-clean-code>)

Author: Steve Barnegren

Published: 2022-01-27T00:00:00Z

Content type: opinion

Language: en

Sources: [Steve Barnegren](<https://devfeed.tech/sources/steve-barnegren.md>)

Topics: [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Code](<https://devfeed.tech/topics/code.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [developers](<https://devfeed.tech/tags/developers.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [technical](<https://devfeed.tech/tags/technical.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This opinion argues that "clean code" is not a useful technical measure because code quality involves different goals that can conflict. It recommends discussing concrete trade-offs and explaining why one solution is better or worse instead of treating "cleanest" as an objective metric.

### Source excerpt

Everyone seems to be striving for 'clean' code at the moment. You can't read a blog post without the author telling you how clean their approach is. Engineering teams get together and discuss which of the possible solutions is the cleanest. Other developers assure you that they practice 'clean code'.

## Avoid backing properties for LiveData and StateFlow

DevFeed: [Avoid backing properties for LiveData and StateFlow](<https://devfeed.tech/articles/avoid-backing-properties-for-livedata-and-stateflow-25886.md>)

Original publisher: [Read original article](<https://medium.com/google-developer-experts/avoid-backing-properties-for-livedata-and-stateflow-706006c9867e?source=rss-1331e67af4e1------2>)

Author: Danny Preussler

Published: 2021-01-12T14:03:52Z

Content type: tutorial

Language: en

Sources: [Stories by Danny Preussler on Medium](<https://devfeed.tech/sources/stories-by-danny-preussler-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [abstract-class](<https://devfeed.tech/tags/abstract-class.md>), [android](<https://devfeed.tech/tags/android.md>), [class](<https://devfeed.tech/tags/class.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [interface](<https://devfeed.tech/tags/interface.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-flow](<https://devfeed.tech/tags/kotlin-flow.md>), [livedata](<https://devfeed.tech/tags/livedata.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [val](<https://devfeed.tech/tags/val.md>), [var](<https://devfeed.tech/tags/var.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

This Kotlin article argues that developers can avoid duplicated backing properties when exposing LiveData and StateFlow. It proposes separating the public API from the implementation with interfaces or an abstract class, including in ViewModels.

### Source excerpt

https://unsplash.com/photos/OopPIi_A428 If you have ever worked with LiveData you probably have written code similar to this: class MyViewModel: ViewModel() { val loading: LiveData<Boolean> get() = _loading private val _loading = MutableLiveData<Boolean>()} This seems nowadays the typical way developers would expose some immutable LiveData, while being able to have a mutable version inside the implementation we would write data into. Every time I saw, or even had to write, this kind of code something cringed inside me. As I quoted in one of my talks this feeling in our brain is for real: social missteps activate regions in the brain, [..] that have been previously associated with physical pain. As developers, we know something is wrong with this code, right? It also feels like we are writing manual getters and setters here. What's wrong? We could start with the prefix we use for the backing field, although we fought hard for a long time to get rid of prefixes, we accept it here! It is even made it into the official coding conventions. But even if we rename it, it still cringes: class MyViewModel: ViewModel() { val loading: LiveData<Boolean> get() = mutableLoading private val mutableLoading = MutableLiveData<Boolean>()} This duplication feels unneeded! Especially if you write something like a ViewModel that exposed many of these, you get lost in reading the code just by all these duplications. But it's just LiveData? You might think it's just a specialty of LiveData and the future of that construct might be a more limited one. And you would not have this issue with primitives. The language supports this out of the box with a private setter: var secret: String = "Secret" private set But there is a new kid in town: StateFlow needs the same thing! Look at this snippet from the official Jetbrains blog: class DownloadingModel { private val _state = MutableStateFlow<DownloadStatus>(DownloadStatus.NOT_REQUESTED) val state: StateFlow<DownloadStatus> get() = _state This probl

## Why Large Dependency-Injection Constructors Signal a Single-Responsibility Problem

DevFeed: [Why Large Dependency-Injection Constructors Signal a Single-Responsibility Problem](<https://devfeed.tech/articles/the-forgotten-art-of-construction-25893.md>)

Original publisher: [Read original article](<https://proandroiddev.com/the-forgotten-art-of-construction-cfedc368e67f?source=rss-1331e67af4e1------2>)

Author: Danny Preussler

Published: 2020-06-22T17:39:16Z

Content type: opinion

Language: en

Sources: [Stories by Danny Preussler on Medium](<https://devfeed.tech/sources/stories-by-danny-preussler-on-medium.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [koin](<https://devfeed.tech/topics/koin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [code-smells](<https://devfeed.tech/tags/code-smells.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

The article argues that dependency-injection tools can hide overly large constructors. It presents large constructors as a code smell that may indicate a violation of the Single Responsibility Principle, and notes that they make classes harder to test.

### Source excerpt

How tools made us forget how to write sane constructors https://unsplash.com/photos/qvBYnMuNJ9A In an ideal world, developers get smarter every day. The code we write this year should be better than the code we wrote 10 years ago, which in turn should be better than the code 20 years ago. Today we have better tools, more modern languages, and better practices. But as often in life, we realize we are not living in that ideal world. In nearly every codebase I see today, there are things that would shock a developer two decades ago. I am speaking of what Mark Seemann called "Constructor Over Injection". We've all learned to inject our dependencies into constructors. And ideally use a tool for that like Spring or Dagger. If you look at some random classes from your codebase, how many fields are you injecting? Three? Five? More? I'm pretty sure you easily can find classes with even more, like this one: class ProfilePresenter @Inject constructor( @MainThreadScheduler private val mainScheduler: Scheduler, @IOScheduler private val ioScheduler: Scheduler, private val profileApi: ProfileApi, private val userRepository: UserRepository, private val analytics: Analytics, private val errorReporter: ErrorReporter private val referrerTracker: ReferrerTracker, private val shareTracker: ShareTracker, private val tracksRepository: TracksRepository, private val playlistRepository: PlaylistRepository ) If you would show this constructor to a developer from 20 years ago they would probably look at you as if you would be crazy. No one would want to call this constructor and provide all these parameters. But these days we don't care. We don't have to. We have a tool that will provide us with all those parameters, right? This does not make it right though! The proof If you would use some manual injection code or a service locator like Koin, you would notice more what's going on because you would need to write code like this: ProfilePresenter(get(), get(), get(), get(), get(), get(), get(),

## Technical Debt and Legacy Code: Techniques for Improving Code Health

DevFeed: [Technical Debt and Legacy Code: Techniques for Improving Code Health](<https://devfeed.tech/articles/technical-debt-guru-level-unlocked-34665.md>)

Original publisher: [Read original article](<http://fernandocejas.com/2019/06/13/technical-debt-guru-level-unlocked/>)

Author: Fernando Cejas (me@fernandocejas.com)

Published: 2020-03-13T00:00:00Z

Content type: opinion

Language: en

Sources: [Fernando Cejas Blog](<https://devfeed.tech/sources/fernando-cejas-blog.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [maintenance](<https://devfeed.tech/topics/maintenance.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [culture](<https://devfeed.tech/tags/culture.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [ios](<https://devfeed.tech/tags/ios.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [linux](<https://devfeed.tech/tags/linux.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [programming](<https://devfeed.tech/tags/programming.md>), [python](<https://devfeed.tech/tags/python.md>), [rust](<https://devfeed.tech/tags/rust.md>), [scala](<https://devfeed.tech/tags/scala.md>), [software](<https://devfeed.tech/tags/software.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [strategies](<https://devfeed.tech/tags/strategies.md>), [technical](<https://devfeed.tech/tags/technical.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

This article examines technical debt and legacy code in software projects, defines legacy code as code without tests, and discusses techniques and strategies for assessing and addressing code health and maintenance challenges.

### Source excerpt

As **Software Engineers** we know that **Technical Debt** and **Legacy Code** are familiar concepts we have to live with. **Code healthiness and maintenance are challenging**, so let's dive into **tips and techniques on how to effectively address this problem.**

## Goodbye, Clean Code

DevFeed: [Goodbye, Clean Code](<https://devfeed.tech/articles/goodbye-clean-code-36166.md>)

Original publisher: [Read original article](<https://overreacted.io/goodbye-clean-code/>)

Published: 2020-01-11T00:00:00Z

Content type: opinion

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [clean-code](<https://devfeed.tech/topics/clean-code.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Code](<https://devfeed.tech/topics/code.md>), [Graphics](<https://devfeed.tech/topics/graphics.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>)

### AI overview

The author recounts refactoring repetitive shape-resizing code in a graphics editor and initially believing that eliminating duplication made the code better. Years later, they conclude that obsessing over measurable aspects of "clean code" can become a phase and that clean-code practices should guide development without becoming an end in themselves.

### Source excerpt

Let clean code guide you. Then let it go.

## triversity - An Interview with two trivago Tech Camp Participants

DevFeed: [triversity - An Interview with two trivago Tech Camp Participants](<https://devfeed.tech/articles/triversity-an-interview-with-two-trivago-tech-camp-participants-27977.md>)

Original publisher: [Read original article](<https://tech.trivago.com/post/2019-10-23-triversityinterview/>)

Author: Matthias Endler

Published: 2019-10-23T00:00:00Z

Content type: article

Language: en

Sources: [Trivago](<https://devfeed.tech/sources/trivago.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Agile](<https://devfeed.tech/topics/agile.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [Code review](<https://devfeed.tech/topics/code-review.md>), [clean-code](<https://devfeed.tech/topics/clean-code.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [design](<https://devfeed.tech/tags/design.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering-culture](<https://devfeed.tech/tags/engineering-culture.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [interview](<https://devfeed.tech/tags/interview.md>), [projects](<https://devfeed.tech/tags/projects.md>), [prototype](<https://devfeed.tech/tags/prototype.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

An interview with Gyumin Lee and Eunae Jang about their participation in trivago Tech Camp 2019. They describe developing triversity, a prototype project management web application for university collaboration, and learning software engineering practices through mentoring and an agile workflow.

### Source excerpt

We are originally from South Korea and we've been in Germany for about three years.We often check the Facebook and Instagram posts from Life at trivago, so we could easily find out ab...

## Architecting an iOS networking layer: Part 2

DevFeed: [Architecting an iOS networking layer: Part 2](<https://devfeed.tech/articles/architecting-an-ios-networking-layer-part-2-24562.md>)

Original publisher: [Read original article](<https://medium.com/bleeding-edge/architecting-an-ios-networking-layer-part-2-fe92a9231995?source=rss----d8ebe85cdc0f---4>)

Author: Melissa Yung

Published: 2019-04-01T10:05:31Z

Content type: tutorial

Language: en

Sources: [Bleeding Edge - Medium](<https://devfeed.tech/sources/bleeding-edge-medium.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [networking](<https://devfeed.tech/topics/networking.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [ios](<https://devfeed.tech/tags/ios.md>), [networking](<https://devfeed.tech/tags/networking.md>), [rest-api](<https://devfeed.tech/tags/rest-api.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [swift](<https://devfeed.tech/tags/swift.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

Part 2 demonstrates an iOS networking layer in a sample app. It shows how a view uses request configuration, an HTTP client, a request object, and event listeners to fetch forum posts through a REST API, and explains unit testing with mocks.

### Source excerpt

A sample project including unit tests to demo our clean architectureIllustration by Marta Pucci Welcome to Part 2 of this two part series, where we go through the networking layer we use in our iOS app at Clue. As a follow-up to Part 1, where we went through the main building blocks of our networking architecture, we would like to now show it in action in our demo app. This demo app consists of a simple view with a button that is used to fetch forum posts. Based on the success of the request, the UI is updated to reflect the number of fetched posts. We will use a fake online REST API https://jsonplaceholder.typicode.com/ to achieve this. The View For simplicity's sake, we will only focus on the bit that performs the network request i.e. fetchPosts. https://medium.com/media/62e814391f03e564236862388fcef9c2/href A. The view needs to keep a reference to the fetchPostsRequest instance to ensure that it doesn't get deallocated prematurely. B. The view puts together the required building blocks to make the service call i.e RequestConfiguration, HTTPClient, Request and RequestEventListenerFactory The Request Objecthttps://medium.com/media/11bdd42c97a15f6245aa97fe9ed64bd5/href A.1 and A.3 The request conforms to the HTTPClientDelegate protocol as we want to make a service call and handle its success or failure. A.1 and A.2 The request conforms to the RequestObserving protocol as we have interested listeners that want to be notified of the results once the service call is complete. This means that it has an eventListenerFactory which will provide a list of listeners. B. Both the required HTTPClient and the RequestEventListenerFactory are injected to the constructor to ensure testability. C. We need to set the request to be the delegate of the HTTPClient so that we can be notified when the service call returns. D. The only public interface is the actual call to perform the service call. It is public since this class lives in the networking layer module which is separate from

## Architecting an iOS networking layer: Part 1

DevFeed: [Architecting an iOS networking layer: Part 1](<https://devfeed.tech/articles/architecting-an-ios-networking-layer-part-1-24561.md>)

Original publisher: [Read original article](<https://medium.com/bleeding-edge/architecting-an-ios-networking-layer-part-1-f2ad8417a6ce?source=rss----d8ebe85cdc0f---4>)

Author: Martin Höller

Published: 2019-04-01T10:01:29Z

Content type: tutorial

Language: en

Sources: [Bleeding Edge - Medium](<https://devfeed.tech/sources/bleeding-edge-medium.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [App](<https://devfeed.tech/topics/app.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [backend](<https://devfeed.tech/tags/backend.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [interface](<https://devfeed.tech/tags/interface.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [networking](<https://devfeed.tech/tags/networking.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [swift](<https://devfeed.tech/tags/swift.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This tutorial explains how Clue redesigned its iOS app's networking layer from a singleton-based implementation into a more modular architecture. It describes the limitations of the old design and introduces HTTPClient, protocols, request classes, separation of concerns, and improved testability.

### Source excerpt

Cleaner and more modular building blocksIllustration by Marta Pucci In this two part series, we will go through the networking layer we use in our iOS app at Clue. Part 1 covers how we moved our networking layer to a cleaner more modular architecture 🤓 Part 2 includes a demo project on how we use it to make our network requests 🥳 Let's get started! Our iOS app makes use of a third-party library to handle the finer details of the networking requests to our server. Our interface to this library used to be a singleton class, through which all our service calls would be executed and handled. Whilst this worked and was "okay" for one or two service calls, it very quickly got out of control as our app grew and we needed something better! Let's see why this old implementation was so limiting and what we wanted to achieve with the new architecture. Limitations of the old implementation The singleton class had too many responsibilities. It needed to construct each service call with the endpoint, body and parameters as well as handle the success and failure of each call. It lacked separation of concerns between the networking and the business logic layer. It lacked testability as it required mocking of the backend and extensive test case setups. It was tightly coupled with a third party library, making it harder to replace if needed. Goals of the new architecture Move away from the singleton class anti-pattern. Instead of having a singleton class for all the requests, each request is a class of its own and builds up its networking stack. Improved testability. Increased decoupling between the networking and the business layer by separating the response handling from the network requests implementation. Easy to use interface to create a network request. Let's now go through the main building blocks of the new architecture. HTTPClient The HTTPClient class is responsible for performing the actual network request and conforms to the HTTPClientProviding protocol. We abstract this i

## Mark intentionally empty methods with comments

DevFeed: [Mark intentionally empty methods with comments](<https://devfeed.tech/articles/intentionally-left-empty-39026.md>)

Original publisher: [Read original article](<https://vladimirj.dev/intentionally-left-empty/>)

Author: Vladimir Jovanović

Published: 2019-03-20T09:44:00Z

Content type: opinion

Language: en

Sources: [Vladimir Jovanović](<https://devfeed.tech/sources/vladimir-jovanovic.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article argues that empty method implementations can be mistaken for errors. It recommends adding comments to clearly indicate when a method is intentionally empty or unfinished.

### Source excerpt

Doing copy/paste of the sample data from one project to another is not an option.

## Clean code with Java 9 at GeeCON

DevFeed: [Clean code with Java 9 at GeeCON](<https://devfeed.tech/articles/clean-code-with-java-9-at-geecon-21496.md>)

Original publisher: [Read original article](<https://mirocupak.com/clean-code-with-java-9-at-geecon/>)

Published: 2018-05-17T20:05:44Z

Content type: opinion

Language: en

Sources: [Miro Cupak](<https://devfeed.tech/sources/miro-cupak.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Code](<https://devfeed.tech/topics/code.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [clean-code](<https://devfeed.tech/tags/clean-code.md>), [conference](<https://devfeed.tech/tags/conference.md>), [geecon](<https://devfeed.tech/tags/geecon.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [java](<https://devfeed.tech/tags/java.md>), [java-9](<https://devfeed.tech/tags/java-9.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [optional](<https://devfeed.tech/tags/optional.md>), [speaking](<https://devfeed.tech/tags/speaking.md>), [talk](<https://devfeed.tech/tags/talk.md>)

### AI overview

A personal report from GeeCON describes a live demo on writing cleaner code with Java 9. The talk covers JShell and several JDK 9 features, including collection factory methods, private interface methods, Stream API enhancements, Optional updates, StackWalker, and an HTTP/2 client.

### Source excerpt

Last week, I was fortunate enough to attend GeeCON. GeeCON is a well-known conference in the JVM world and this year marked its 10th anniversary. More than 1200 people came to see over 80 sessions from more than 70 speakers distributed across 4 tracks over 3 days in Krakow, Poland. This was my first time attending GeeCON. In retrospect,...

## QueryFilter: A Model Filtering Concept

DevFeed: [QueryFilter: A Model Filtering Concept](<https://devfeed.tech/articles/queryfilter-a-model-filtering-concept-39018.md>)

Original publisher: [Read original article](<https://blog.jgrossi.com/2018/queryfilter-a-model-filtering-concept/>)

Author: Junior Grossi

Published: 2018-04-23T13:50:39Z

Content type: tutorial

Language: en

Sources: [Junior Grossi](<https://devfeed.tech/sources/junior-grossi.md>)

Topics: [Laravel](<https://devfeed.tech/topics/laravel.md>), [Eloquent ORM](<https://devfeed.tech/topics/eloquent.md>), [PHP](<https://devfeed.tech/topics/php.md>), [WordPress](<https://devfeed.tech/topics/wordpress.md>), [Database](<https://devfeed.tech/topics/database.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [database](<https://devfeed.tech/tags/database.md>), [eloquent](<https://devfeed.tech/tags/eloquent.md>), [json](<https://devfeed.tech/tags/json.md>), [laravel](<https://devfeed.tech/tags/laravel.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [orm](<https://devfeed.tech/tags/orm.md>), [php](<https://devfeed.tech/tags/php.md>), [query](<https://devfeed.tech/tags/query.md>), [talks](<https://devfeed.tech/tags/talks.md>)

### AI overview

This tutorial presents QueryFilter, a model-filtering concept for Laravel applications using Eloquent ORM. It demonstrates filtering models from URL query parameters, with an example app that returns filtered posts as JSON and uses Corcel to retrieve posts from a WordPress database.

### Source excerpt

Having a clean code with single responsibility is important, and doing that for model filtering can be easy and very powerful. Believe me. This blog post is related to a talk I gave on April, 2018 on Darkmira Tour PHP 2018, in Brasília/DF, Brazil, with the same title. The slides are on SpeakerDeck. Filtering models ... Continue reading QueryFilter: A Model Filtering Concept

[Next page](<https://devfeed.tech/tags/clean-code.md?cursor=WyIyMDE4LTA0LTIzVDEzOjUwOjM5KzAwOjAwIiwgImFkNDI0OGQxLTk4NzQtNDFmOC1iMWJmLTkwNzhlMzVmZjExZSJd>)