refactoring 相关问题

重构是一种规范的技术,用于重构现有的代码体,改变其内部结构而不改变其外部行为。

如何按照Uncle Bob的规则(推荐)在一种方法中正确使用一个try-catch块?

比如我有一个方法 void process(String userId) { if(userId == null) throw new IlligalArgumentException("需要用户 ID"); 用户 user = userService.findUserById(userId);...

回答 1 投票 0

如何重构两个函数之间的公共代码行

我有以下示例代码: 公共字符串 X() 抛出 JAXBException { LC lc=getLC(); Comp comp = genComp(lc); 返回 convToStr(comp); } public void Y() 抛出 JAXBException,IOExc ...

回答 1 投票 0

如何使用 grep 或 sed 命令从正则表达式打印捕获的组?

我想摆脱遗留代码中存在的冗余魔术字符串: 锚点:contentDefinitionHelper.toPatternFormField( 领域, '锚', 默认表单字段,

回答 4 投票 0

实现哪个设计模式来划分职责?

我有一部分应用程序想要重构。所涉及的类具有太多的职责以及太多的依赖性。需要重构的代码的不同部分

回答 0 投票 0

Typescript React:如何将我的界面作为道具传递到组件中?

我正在重构待办事项列表项目的代码,目前我的组件文件夹中有一个名为“Active”(用于活动任务)的文件。 我的问题是我很难通过国际...

回答 0 投票 0

如何按字母顺序对单个文件中的 JS 变量进行排序?

我有一个包含大约 1,000 个变量的 JS 文件,如下所示: 导出常量 FruitOrange: React.FC = () => ( 橙色 ); 导出常量

回答 1 投票 0

VueJS:socket.on 的钩子

我有一个 VueJS 应用程序,它与节点后端交互并通过 Socket.IO 交换数据。到目前为止,代码本身相当混乱。我的想法是为每个 SocketListener 创建一个单独的挂钩。

回答 0 投票 0

如何在提取到变量(LSP)后自动触发重命名流程?

我正在使用语言服务器协议实现对语言的 IDE 支持。 我想在将变量提取到当前范围后触发重命名。也就是说,我已经实施了...的第 1 步到第 2 步

回答 0 投票 0

重构 C++ 宏签名以删除一个参数

我正在探索重构 C++ 宏以从签名中删除 1 个参数的工具 到目前为止,这是一个手动过程,我无法完成它,因为它已在多个文件中使用 CLion 有 C...

回答 0 投票 0

重构 MySQL 中的 Rails 作用域方法 CASE-WHEN-THEN-ELSE-END

我正在使用 MySQL 并将我的应用程序升级到 Rails 7。这样做时,我必须在我的范围方法中重构一些与订单相关的查询。 在 Rails 7 之前,我使用以下范围方法(调用...

回答 0 投票 0

无法从非项目文件执行重构

在 PyCharm 中,我通常打开一个“新建...”“Python 文件”,我认为这会将每个新文件添加到我在计算机科学课开始时打开的原始项目中。 在任何...

回答 0 投票 0

如何衡量一个文件的代码可读性?

我想确定作者编写的代码的可读性。因此,我正在寻找一种与 Python 兼容的工具来为我提供此类功能。输入源是一个

回答 0 投票 0

在Spring Boot项目中使用RocksDB代替HashMap,应该避免哪些陷阱?

背景: 有一个Spring Boot服务需要在启动的时候从Elasticsearch同步一些数据到内存。处理后的数据将被@Service A 使用。 数据需要

回答 0 投票 0

有什么方法可以重构这段代码并避免使用所有 if 语句的倍数吗?

我正在尝试重构这段代码以避免使用这么多 if 语句,你有什么建议可以给我吗? .问题是我有 4 个不同的输入来给出一个答案。 常量警报=

回答 1 投票 0

如何避免多次设置模块源?

我的存储库多次使用来自不同存储库的 Glue 模块。每次使用都以: 模块“酒吧”{ source = "git::[email protected]:foo/modules.git//app?ref=v0.0.3" 我...

回答 1 投票 0

如何不复制代码?通用和非通用实现 - 使用相同的主体

请告诉我我应该如何修改这段代码,以免复制/粘贴太多?有什么方法可以将泛型称为非泛型?我应该将 传递给 generic 并对此感到满意吗?什么是... 请告诉我我应该如何修改这段代码,以免复制/粘贴太多?有什么方法可以将泛型称为非泛型?我应该将 <object> 传递给 generic 并对此感到满意吗?什么是最佳解决方案? 我有例如 public interface IHttpService { Task<T> Post<T>(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default); Task Post(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default); } 所以他们有几乎相同但不同的实现 public async Task Post(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Post, uri); request.Content = content; await sendRequest(request, timeOut, token); } public async Task<T> Post<T>(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Post, uri); request.Content = content; return await sendRequest<T>(request, timeOut, token); } private async Task sendRequest(HttpRequestMessage request, int timeOut = 100, CancellationToken token = default) { try { using var requestCTS = new CancellationTokenSource(TimeSpan.FromSeconds(timeOut)); using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(requestCTS.Token, token); using var response = await _httpClient.SendAsync(request, linkedCts.Token); if (!response.IsSuccessStatusCode) { var error = await response.Content.ReadAsStringAsync(token); throw new Exception(error); } } private async Task<T> sendRequest<T>(HttpRequestMessage request, int timeOut = 100, CancellationToken token = default) { try { using var requestCTS = new CancellationTokenSource(TimeSpan.FromSeconds(timeOut)); using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(requestCTS.Token, token); using var response = await _httpClient.SendAsync(request, linkedCts.Token); if (!response.IsSuccessStatusCode) { var error = await response.Content.ReadAsStringAsync(token); throw new Exception(error); } return (await response.Content.ReadFromJsonAsync<T>())!; } 更新 private async Task<HttpContent> sendRequest(HttpRequestMessage request, int timeOut = 100, CancellationToken token = default) { try { using var requestCTS = new CancellationTokenSource(TimeSpan.FromSeconds(timeOut)); using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(requestCTS.Token, token); using var response = await _httpClient.SendAsync(request, linkedCts.Token); if (!response.IsSuccessStatusCode) { await response.Content.ReadAsStringAsync(token); throw new Exception(error); } return response.Content; } catch (AccessTokenNotAvailableException) { _navigationManager.NavigateToLogout(StaticStringHelper.LogoutPatch); return default(HttpContent)!; } } 当我像这样使用它时 public async Task<T> Get<T>(string uri, int timeOut = 100, CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Get, uri); return await (await sendRequest(request, timeOut, token)).ReadFromJsonAsync<T>(cancellationToken: token); } 我知道 microsoft.AspNetCore. Components.WebAssembly.Rendering.WebAssemblyRenderer[100] Unhandled exception rendering component: Cannot access a disposed object. Object name: 'System.Net.Http.BrowserHttpContent'. System. ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Http.BrowserHttpContent'. at System.Net.Http.HttpContent.CheckDisposed() at System.Net.Http.HttpContent.ReadAsStreamAsync(CancellationToken cancellationToken) C# 中没有通用的“void”。在某些情况下,您可以只使用带有 int 或 bool 之类的泛型作为无意义的值。在其他情况下,你只需要接受它并保留两个实现。 在这种特殊情况下,唯一的区别似乎是response.Content.ReadFromJsonAsync<T>(),因此您应该能够重构它以使所有其他代码通用。由于内容已处理,您需要使用委托来注入不同的代码: public Task Post(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default) => Post<int>(uri, content, c => Task.FromResult(0), timeOut , token); public async Task<T> Post<T>(string uri, HttpContent content, int timeOut = 100, CancellationToken token = default) => Post(uri, content, ReadFromJson, timeOut , token)!; private Task<T> ReadFromJson(HttpContent content) => content.ReadFromJsonAsync<T>(); private async Task<T> Post<T>(string uri, HttpContent content, Func<HttpContent, Task<T>> handleContent, int timeOut = 100, CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Post, uri); request.Content = content; try { using var requestCTS = new CancellationTokenSource(TimeSpan.FromSeconds(timeOut)); using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(requestCTS.Token, token); using var response = await _httpClient.SendAsync(request, linkedCts.Token); if (!response.IsSuccessStatusCode) { var error = await response.Content.ReadAsStringAsync(token); throw new Exception(error); } return await handleContent(response.Content); } c => Task.FromResult(0) 只是使通用类型适合的东西,“0”值从未在任何地方使用过。

回答 1 投票 0

有没有更好的方法来重构这个ViewController?

我有以下 ViewController: 导入 UIKit 类 FavoriteListViewController: UIViewController { // 标记:- 私有属性 私人让 tableView = UITableView() 私人...

回答 0 投票 0

消除冗余空检查:c#中的方法分解和可空性

关于可空性的一切在 c# 中都很棒。但是我们在分解代码的时候应该怎么处理呢? 想象一下,我们有一个大方法。它接收一些对象,检查重要字段是否为 null 和 ...

回答 2 投票 0

如何使用带指令的脚本自动重构 Java 代码?

如何通过 Java 代码/Groovy 插件以编程方式重构此类? 比方说,我需要: 将 foo.method2 重命名为 foo.method3 将 myMethod 重命名为 yourMethod 更改导入的包 org.you.c...

回答 2 投票 0

如何减少常量的重复?

我有这个 Perl 脚本,其中包含许多定义的配置文件常量。例如: 使用常数 { LOG_DIR => "/var/log/", LOG_FILENAME ...

回答 5 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.