在前端跟踪已删除对象并将这些更改保存在服务器上的最有效方法是什么?
What would be the most efficient way of tracking deleted objects on the front-end and save these changes on server?
我正在开发一个应用程序,用户(教师)需要更新 class 中注册的学生。在前端,用户可以 remove/add 学生以及更新 class(姓名、房间等)
的属性
目前,我正在从 class 中删除未包含在请求中的学生。添加学生的类似想法。
public async Task UpdateSectionEnrollment(long sectionId, List<long> students)
{
var sectionSchedule = await _scheduleRepository.GetAll()
.Where(a => a.SectionId == sectionId)
.ToListAsync();
var allEnrolledUserIds = sectionSchedule.Select(a => a.UserId).ToList();
//Add new students
var newEnrollement = students.Except(allEnrolledUserIds);
var removeStudents = allEnrolledUserIds.Except(students);
// add new students to section enrollement
foreach (var userId in newEnrollement)
{
await _scheduleRepository.InsertAsync(new SectionStudent(userId, sectionId));
}
var sections = sectionSchedule.Where(s => removeStudents.Any(id => id == s.Id));
foreach (var section in sections)
{
await _scheduleRepository.DeleteAsync(section);
}
await CurrentUnitOfWork.SaveChangesAsync();
}
有没有更好的方法来做这个操作?每个 add/remove 学生是否应该根据单个请求执行而不是批量操作?
询问“什么是最好的”的问题通常是题外话,所以尽量避免问他们..
我会将此问题视为“我的方法是否有任何明显的缺点”:如果你是我,我认为我会包括每个学生 ID 和添加或删除的说明,而不是“不提及”这意味着删除它”。我之所以这样说,主要是因为通过具体说明已知学生的意图意味着两个了解不同学生的前端客户端可以在(服务器,即真实来源)上建立一个全面的画面,而如果你有一个“删除任何未提及的”然后在有两个客户端发送更新的情况下服务器上的最终静止状态取决于哪个客户端最近说话。当然,您可以坚持“不提及意味着删除”,但如果您需要与多个客户进行更密切的沟通,确保每个客户在提交更改之前都是最新的,这可能会成为并发的过于复杂的练习管理
你可能会说“好吧,这永远不会适用于我的情况 - 永远只有一个客户,它是真相的来源” - 我只能指出永远不会是很长的时间... :)
我正在开发一个应用程序,用户(教师)需要更新 class 中注册的学生。在前端,用户可以 remove/add 学生以及更新 class(姓名、房间等)
的属性目前,我正在从 class 中删除未包含在请求中的学生。添加学生的类似想法。
public async Task UpdateSectionEnrollment(long sectionId, List<long> students)
{
var sectionSchedule = await _scheduleRepository.GetAll()
.Where(a => a.SectionId == sectionId)
.ToListAsync();
var allEnrolledUserIds = sectionSchedule.Select(a => a.UserId).ToList();
//Add new students
var newEnrollement = students.Except(allEnrolledUserIds);
var removeStudents = allEnrolledUserIds.Except(students);
// add new students to section enrollement
foreach (var userId in newEnrollement)
{
await _scheduleRepository.InsertAsync(new SectionStudent(userId, sectionId));
}
var sections = sectionSchedule.Where(s => removeStudents.Any(id => id == s.Id));
foreach (var section in sections)
{
await _scheduleRepository.DeleteAsync(section);
}
await CurrentUnitOfWork.SaveChangesAsync();
}
有没有更好的方法来做这个操作?每个 add/remove 学生是否应该根据单个请求执行而不是批量操作?
询问“什么是最好的”的问题通常是题外话,所以尽量避免问他们..
我会将此问题视为“我的方法是否有任何明显的缺点”:如果你是我,我认为我会包括每个学生 ID 和添加或删除的说明,而不是“不提及”这意味着删除它”。我之所以这样说,主要是因为通过具体说明已知学生的意图意味着两个了解不同学生的前端客户端可以在(服务器,即真实来源)上建立一个全面的画面,而如果你有一个“删除任何未提及的”然后在有两个客户端发送更新的情况下服务器上的最终静止状态取决于哪个客户端最近说话。当然,您可以坚持“不提及意味着删除”,但如果您需要与多个客户进行更密切的沟通,确保每个客户在提交更改之前都是最新的,这可能会成为并发的过于复杂的练习管理
你可能会说“好吧,这永远不会适用于我的情况 - 永远只有一个客户,它是真相的来源” - 我只能指出永远不会是很长的时间... :)