React Native
React Native
Example:
// Bad
class UserProfile extends React.Component {
fetchData() {
// Code for fetching user data
}
render() {
// Code for user profile rendering and interaction
}
}
// Good
class UserProfile extends React.Component {
render() {
// Code for user profile rendering and interaction
}
}
Project Structure:
Each component in the “components” folder has a single
responsibility, like a button or an input field.
Screens in the “screens” folder are responsible for
displaying specific views.
/src
|-- /components
| |-- Button.tsx
| |-- Input.tsx
|-- /screens
| |-- HomeScreen.tsx
| |-- ProfileScreen.tsx
|-- /services
| |-- ApiService.ts
| |-- AuthService.ts
Example:
// Bad
class Typography extends React.Component {
// Code for rendering and handling clicks
}
// Good
interface TypographyProps {
// Props contract
}
Project Structure:
/src
|-- /features
| |-- /authentication
| | |-- components
| | | |-- LoginForm.tsx
| | | |-- RegistrationForm.tsx
| | |-- screens
| | | |-- LoginScreen.tsx
| | | |-- RegistrationScreen.tsx
| | |-- services
| | |-- AuthProvider.ts
3. Liskov Substitution Principle (LSP):
Example:
// Parent component
class List extends React.Component {
render() {
// Code for rendering a list
}
}
// Child component
class Grid extends List {
// Inherits rendering code from List
}
Project Structure:
/src
|-- /common
| |-- /interfaces
| |-- DataProvider.ts
| |-- Logger.ts
Example:
// Bad
interface ComponentProps {
render(): React.ReactNode;
handleClick(): void;
fetchData(): Promise<void>;
}
// Good
interface Renderable {
render(): React.ReactNode;
}
interface Clickable {
handleClick(): void;
}
interface Fetchable {
fetchData(): Promise<void>;
}
Project Structure:
/src
|-- /containers
| |-- HomeContainer.ts
| |-- ProfileContainer.ts
| |-- ProductListContainer.ts
| |-- ShoppingCartContainer.ts
5. Dependency Inversion Principle (DIP):
Example:
// Bad
class UserService {
fetchUserData() {
// Code for fetching user data
}
}
componentDidMount() {
this.userService.fetchUserData();
}
}
// Good
interface UserDataService {
fetchUserData(): Promise<void>;
}
componentDidMount() {
this.userService.fetchUserData();
}
}
Project Structure:
/src
|-- /di
| |-- DependencyProvider.ts
| |-- Dependencies.ts
Conclusion: