小编Mai*_*eyy的帖子

在使用ErrorBoundary后,React仍显示错误

我的React应用程序正在捕获错误并正确显示我的自定义错误消息,但一秒钟后它仍然显示原始错误记录.因此,后备UI然后被初始错误屏幕取代.

测试组件:

import React, { Component } from 'react';

export class Test extends React.Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
        <ErrorBoundary>

        <Error></Error>

        </ErrorBoundary>);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误组件:

import React, { Component } from 'react';

export class Error extends React.Component {
    constructor(props) {
        super(props);
    }

    render() {
        return ({ test });
    }
}
Run Code Online (Sandbox Code Playgroud)

在错误组件测试中未定义,因此将抛出未定义的错误.

ErrorBoundary:

import React, { Component } from 'react';

export class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = { error: null, errorInfo: null }; …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs create-react-app

18
推荐指数
1
解决办法
2268
查看次数

如何以正确的方式实现存储库模式?

在为我的ASP.NET项目实现存储库模式时,我遇到了一些我无法理解的问题.所以我对如何以正确的方式实现存储库模式有几个问题.

根据我的经验,我认为只有在我的应用程序中,没有行为的类/模型,在他们的存储库旁边并不是很好的OOP.但是,这是我实现存储库模式的方式.我只是到处都需要一个存储库实例,来执行一些操作.这种方法的结果是我的所有域类都没有行为.

它们只是没有方法的数据对象.我的老师告诉我,我正在使用薄模型,我应该努力制作胖模型.为了回应这些反馈,我在类中实现了一些业务逻辑,但是我遇到了一些问题:

场景:

我的User班级中有一个包含用户对象的朋友列表,代表某个用户的朋友.向用户添加新朋友时,域类方法会检查朋友列表中是否已存在"朋友".如果没有,他将被添加到列表中.需要将这些更改发送到数据库以实现持久性.

我知道这必须在每个域类的存储库中完成,但是对存储库方法的调用在哪里属于应用程序的体系结构?

现在我调用域类方法本身的存储库方法,以保持对数据库的更改:

public void AddFriend(User friend)
    {
        foreach(User f in Friends)
        {
            if(f.Username == friend.Username)
            {
                throw new Exception(String.Format("{0} is already a friend.", friend.Username));
            }
        }

        Friends.Add(friend);
        userRepo.AddFriend(this.Id, friend.Id);
    }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法,因为某些原因我认为不是.关于单元测试,我们需要使用这种方法进行一些依赖注入,它告诉我它不是一个独立的类(良好的可测试单元).我读过一些人说他们使用额外的服务层或其他东西的帖子.我认为这里需要这种抽象,但某个服务层是怎样的?它是什么,哪些方法等?

我见过其他一些学生在域类中使用静态方法,它提供了添加新对象,更新对象,删除对象和获取所有对象等功能.

例:

public class Tram
{
    private static TramRepository Repo = new TramRepository(new DBTram());

    public static void AddTram(int tramID, TramType type, int lineNr)
    {
        Tram tram = new Tram(tramID, type, TramStatus.depot, lineNr, true, null);
        Repo.AddTram(tram);
    }

    public static List<Tram> GetAll()
    { 
        Repo.GetAll(); …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net repository-pattern

14
推荐指数
1
解决办法
1059
查看次数