作者:捕鱼达人2602929461 | 来源:互联网 | 2024-11-28 15:27
在开发过程中,我们经常遇到需要处理分页数据的情况。然而,由于对对象的理解不够深刻,可能会导致代码中出现大量的重复和冗余,从而影响代码的可读性和维护性。以下是一个典型的例子及其优化方案。
### 问题描述
原始代码在处理分页数据时,存在大量重复的逻辑,尤其是在设置商店Logo和状态时。这种重复不仅增加了代码的复杂性,还容易引入错误。
#### 原始代码示例
```csharp
public void TimerReloadStores(int currentPage, int pageCount)
{
DataTable storeParm = bo.GetStoreParamSqlServer(currentPage, pageCount, "1", pageTotal);
if (currentPage == 1)
{
// 处理第一页数据
}
if (currentPage != 1)
{
// 处理其他页数据
}
}
```
### 优化方案
为了减少重复代码并提高可读性,我们可以将公共逻辑提取到一个单独的方法中。这样不仅可以简化代码,还能提高代码的复用性和维护性。
#### 优化后的代码示例
```csharp
public void TimerReloadStores(int currentPage, int pageCount)
{
DataTable storeParm = bo.GetStoreParamSqlServer(currentPage, pageCount, "1", pageTotal);
if (currentPage == 1)
{
LoadStoreLogos(storeLogo1, storeLogoSecond1, storeParm, pageCount);
}
else
{
LoadStoreLogos(storeLogoSecond1, storeLogo1, storeParm, pageCount);
}
}
private void LoadStoreLogos(StoreLogo visibleLogo, StoreLogo hiddenLogo, DataTable storeParm, int pageCount)
{
hiddenLogo.Visible = false;
visibleLogo.Visible = true;
for (int i = 0; i
{
try
{
int index = i + 1;
Panel pnl = visibleLogo.Controls["panel" + index] as Panel;
string strStoreLogo = Application.StartupPath + "/Resources/store_default.png";
string filepath = storeParm.Rows[i]["FILE_PATH"].ToString().Replace("~", "");
string filename = storeParm.Rows[i]["FILE_NAME"].ToString();
if (!string.IsNullOrEmpty(filepath) && !string.IsNullOrEmpty(filename))
{
filepath = Application.StartupPath + "/" + filepath + "/" + filename;
if (File.Exists(filepath))
{
strStoreLogo = filepath;
}
}
pnl.BackgroundImage = Image.FromFile(strStoreLogo);
pnl.BackgroundImageLayout = ImageLayout.Stretch;
}
catch (Exception errs)
{
LogCommon.WriteLogInfo(errs.ToString());
}
}
}
```
### 解释
1. **提取公共逻辑**:将加载商店Logo的逻辑提取到 `LoadStoreLogos` 方法中,减少了代码重复。
2. **参数化方法**:通过传递 `visibleLogo` 和 `hiddenLogo` 参数,使得方法更加通用,适用于不同页面的处理。
3. **异常处理**:在循环中添加了异常处理,确保即使某个步骤出错,也不会影响整个过程。
### 结论
通过以上优化,代码变得更加简洁、易读和易于维护。希望这些改进能帮助你在未来的开发中避免类似的低级错误。